diff --git a/.eslintignore b/.eslintignore index 87d8ad2d..66509f73 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,7 +1,7 @@ config/local.js config/mock.local.js config/m2m.local.js -local/seed/ +scripts/import-from-api/ node_modules dist .ebextensions diff --git a/.eslintrc b/.eslintrc index 06a6152f..025c59d8 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,15 +10,18 @@ "rules": { "import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js", "src/tests/*.js"]}], "max-len": ["error", { "ignoreComments": true, "code": 120 }], + "valid-jsdoc": ["error", { + "requireReturn": true, + "requireReturnType": true, + "requireParamDescription": true, + "requireReturnDescription": true + }], "require-jsdoc": ["error", { "require": { "FunctionDeclaration": true, "MethodDefinition": true, "ClassDeclaration": true } - }], - "indent": 0, - "no-multi-spaces": 0, - "valid-jsdoc": 0 + }] } } diff --git a/.gitignore b/.gitignore index 37f3fd7a..6854f12f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ logs *.log npm-debug.log* .DS_Store +.tern-port +*# dist/ diff --git a/README.md b/README.md index 4d0d2696..eaa9ec86 100644 --- a/README.md +++ b/README.md @@ -2,30 +2,30 @@ Microservice to manage CRUD operations for all things Projects. -**Note : Steps mentioned below are best to our capability as guide for local deployment, however, we expect from contributor, being a developer, to resolve run-time issues (e.g. OS and node version issues etc), if any.** - -- [Topcoder Projects Service](#topcoder-projects-service) - - [Local Development](#local-development) - - [Requirements](#requirements) - - [Steps to run locally](#steps-to-run-locally) - - [Import and Export data](#import-and-export-data) - - [đŸ“€ Export data](#%f0%9f%93%a4-export-data) - - [đŸ“„ Import data](#%f0%9f%93%a5-import-data) - - [Run Connect App with Project Service locally](#run-connect-app-with-project-service-locally) - - [Import metadata from api.topcoder-dev.com (deprecated)](#import-metadata-from-apitopcoder-devcom-deprecated) - - [Test](#test) - - [JWT Authentication](#jwt-authentication) - - [Deploying with docker (might need updates)](#deploying-with-docker-might-need-updates) - - [Kafka commands](#kafka-commands) - - [Create Topic](#create-topic) - - [List Topics](#list-topics) - - [Watch Topic](#watch-topic) - - [Post Message to Topic (from stdin)](#post-message-to-topic-from-stdin) - - [References](#references) +**Note: Steps mentioned below are best to our capability as guide for local deployment, however, we expect from contributor, being a developer, to resolve run-time issues (e.g. OS and node version issues etc), if any.** + +- [Local Development](#local-development) + - [Requirements](#requirements) + - [Steps to run locally](#steps-to-run-locally) +- [Run Connect App with Project Service locally](#run-connect-app-with-project-service-locally) +- [Import and Export data](#import-and-export-data) + - [đŸ“€ Export data](#%f0%9f%93%a4-export-data) + - [đŸ“„ Import data](#%f0%9f%93%a5-import-data) +- [Import metadata from api.topcoder-dev.com (deprecated)](#import-metadata-from-apitopcoder-devcom-deprecated) +- [Run via Docker](#run-via-docker) +- [NPM Commands](#npm-commands) +- [Kafka commands](#kafka-commands) + - [Create Topic](#create-topic) + - [List Topics](#list-topics) + - [Watch Topic](#watch-topic) + - [Post Message to Topic (from stdin)](#post-message-to-topic-from-stdin) +- [Test](#test) +- [JWT Authentication](#jwt-authentication) +- [Documentation](#documentation) ## Local Development -Local setup should work good on **Linux** and **macOS**. But **Windows** is not supported at the moment. +Local setup should work good on **Linux**, **macOS** and **Windows**. ### Requirements @@ -42,38 +42,44 @@ Local setup should work good on **Linux** and **macOS**. But **Windows** is not 2. ⚙ Local config - 1. In the `tc-project-service` root directory create `.env` file with the environment variables _(values should be shared with you on the forum)_:
+ 1. In the `tc-project-service` root directory create `.env` file with the next environment variables. Values for **Auth0 config** should be shared with you on the forum.
+ ```bash + # Auth0 config + AUTH0_CLIENT_ID= + AUTH0_CLIENT_SECRET= + AUTH0_URL= + AUTH0_AUDIENCE= + AUTH0_PROXY_SERVER_URL= + + # Locally deployed services (via docker-compose) + PROJECTS_ES_URL=dockerhost:9200 + DB_MASTER_URL=postgres://coder:mysecretpassword@dockerhost:5432/projectsdb + RABBITMQ_URL=amqp://dockerhost:5672 + BUS_API_URL=http://dockerhost:8002/v5 + + # Locally we usually run in Development mode + NODE_ENV=development ``` - AUTH0_CLIENT_ID=... - AUTH0_CLIENT_SECRET=... - AUTH0_URL=... - AUTH0_AUDIENCE=... - AUTH0_PROXY_SERVER_URL=... - ``` - Values from this file would be automatically used by `docker-compose` , command `npm run start:dev` and some other command during local development. + - Values from this file would be automatically used by many `npm` commands. + - ⚠ Never commit this file or its copy to the repository! - 2. Copy config file `config/m2m.local.js` into `config/local.js`: - ```bash - cp config/m2m.local.js config/local.js - ``` - - 3. Set `dockerhost` to point the IP address of Docker. Docker IP address depends on your system. For example if docker is run on IP `127.0.0.1` add a the next line to your `/etc/hosts` file: + 1. Set `dockerhost` to point the IP address of Docker. Docker IP address depends on your system. For example if docker is run on IP `127.0.0.1` add a the next line to your `/etc/hosts` file: ``` 127.0.0.1 dockerhost ``` - Alternatively, you may update `config/local.js` and replace `dockerhost` with your docker IP address. + Alternatively, you may update `.env` file and replace `dockerhost` with your docker IP address. -3. 🚱 Start docker-compose with services which are required to start Project Service locally +1. 🚱 Start docker-compose with services which are required to start Project Service locally ```bash - npm run local:run-docker + npm run services:up ``` Wait until all containers are fully started. As a good indicator, wait until `project-processor-es` successfully started by viewing its logs: ```bash - docker-compose -f local/full/docker-compose.yml logs -f project-processor-es + npm run services:logs -- -f project-processor-es ```
Click to see a good logs example @@ -120,7 +126,7 @@ Local setup should work good on **Linux** and **macOS**. But **Windows** is not - To view the logs from any container inside docker-compose use the following command, replacing `SERVICE_NAME` with the corresponding value under the **Name** column in the above table: ```bash - docker-compose -f local/full/docker-compose.yml logs -f SERVICE_NAME + npm run services:log -- -f SERVICE_NAME ``` - If you want to modify the code of any of the services which are run inside this docker-compose file, you can stop such service inside docker-compose by command `docker-compose -f local/full/docker-compose.yml stop -f ` and run the service separately, following its README file. @@ -134,7 +140,7 @@ Local setup should work good on **Linux** and **macOS**. But **Windows** is not Run, in the project root folder: ```bash - docker-compose -f local/docker-compose.yml up -d + docker-compose -f local/light/docker-compose.yml up -d ``` This docker-compose file starts the next services: @@ -151,7 +157,7 @@ Local setup should work good on **Linux** and **macOS**. But **Windows** is not *NOTE: In production these dependencies / services are hosted & managed outside Project Service.* -4. ♻ Init DB, ES and demo data (it clears any existent data) +2. ♻ Init DB, ES and demo data (it clears any existent data) ```bash npm run local:init @@ -162,7 +168,7 @@ Local setup should work good on **Linux** and **macOS**. But **Windows** is not - create Elasticsearch indexes (remove if exists) - import demo data from `data/demo-data.json` -5. 🚀 Start Project Service +3. 🚀 Start Project Service ```bash npm run start:dev @@ -171,7 +177,7 @@ Local setup should work good on **Linux** and **macOS**. But **Windows** is not Runs the Project Service using nodemon, so it would be restarted after any of the files is updated. The project service will be served on `http://localhost:8001`. -6. *(Optional)* Start Project Service Kafka Consumer +4. *(Optional)* Start Project Service Kafka Consumer *Run this only if you want to test or modify logic of `lastActivityAt` or `lastActivityBy`.* @@ -181,9 +187,32 @@ Local setup should work good on **Linux** and **macOS**. But **Windows** is not npm run startKafkaConsumers:dev ``` -### Import and Export data +## Run Connect App with Project Service locally + +To be able to run [Connect App](https://github.com/appirio-tech/connect-app) with the local setup of Project Service we have to do two things: +1. Configure Connect App to use locally deployed Project service inside `connect-app/config/constants/dev.js` set + + ```js + PROJECTS_API_URL: 'http://localhost:8001' + TC_NOTIFICATION_URL: 'http://localhost:4000/v5/notifications' # if tc-notfication-api has been locally deployed + ``` + +1. Bypass token validation in Project Service. + + In `tc-project-service/node_modules/tc-core-library-js/lib/auth/verifier.js` add this to line 23: + ```js + callback(undefined, decodedToken.payload); + return; + ``` + Connect App when making requests to the Project Service uses token retrieved from the Topcoder service deployed online. Project Service validates the token. For this purpose Project Service have to know the `secret` which has been used to generate the token. But we don't know the `secret` which is used by Topcoder for both DEV and PROD environment. So to bypass token validation we change these lines in the auth library. + + *NOTE: this change only let us bypass validation during local development process*. + +2. Restart both Connect App and Project Service if they were running. + +## Import and Export data -#### đŸ“€ Export data +### đŸ“€ Export data To export data to the default file `data/demo-data.json`, run: ```bash @@ -198,7 +227,7 @@ npm run data:export -- --file path/to-file.json - List of models that will be exported are defined in `scripts/data/dataModels.js`. You can add new models to this list, but make sure that new models are added to list such that each model comes after its dependencies. -#### đŸ“„ Import data +### đŸ“„ Import data *During importing, data would be first imported to the database, and after from the database it would be indexed to the Elasticsearch index.* @@ -215,71 +244,65 @@ npm run data:import -- --file path/to-file.json - As this commands calls topcoder services to get data like members details, so you have to provide environment variables `AUTH0_CLIENT_ID`, `AUTH0_CLIENT_SECRET`, `AUTH0_URL`, `AUTH0_AUDIENCE`, `AUTH0_PROXY_SERVER_URL`, they would automatically picked up from the `.env` file if provided. -- If you encounter conflicts errors during import, you may need to recreated database tables and Elasticssearch indexes by `npm run sync:all`. +- If you encounter conflicts errors during import, you may need to recreated database tables and Elasticssearch indexes by `npm run local:reset`. - List of models that will be imported are defined in `scripts/data/dataModels.js`. You can add new models to this list, but make sure that new models are added to list such that each model comes after its dependencies. -### Run Connect App with Project Service locally - -To be able to run [Connect App](https://github.com/appirio-tech/connect-app) with the local setup of Project Service we have to do two things: -1. Configure Connect App to use locally deployed Project service inside `connect-app/config/constants/dev.js` set - - ```js - PROJECTS_API_URL: 'http://localhost:8001' - TC_NOTIFICATION_URL: 'http://localhost:4000/v5/notifications' # if tc-notfication-api has been locally deployed - ``` - -1. Bypass token validation in Project Service. - - In `tc-project-service/node_modules/tc-core-library-js/lib/auth/verifier.js` add this to line 23: - ```js - callback(undefined, decodedToken.payload); - return; - ``` - Connect App when making requests to the Project Service uses token retrieved from the Topcoder service deployed online. Project Service validates the token. For this purpose Project Service have to know the `secret` which has been used to generate the token. But we don't know the `secret` which is used by Topcoder for both DEV and PROD environment. So to bypass token validation we change these lines in the auth library. - - *NOTE: this change only let us bypass validation during local development process*. - -2. Restart both Connect App and Project Service if they were running. - -### Import metadata from api.topcoder-dev.com (deprecated) +## Import metadata from api.topcoder-dev.com (deprecated) ```bash -CONNECT_USER_TOKEN= npm run demo-data +CONNECT_USER_TOKEN= npm run import-from-api ``` To retrieve data from DEV env we have to provide a valid user token (`CONNECT_USER_TOKEN`). You may login to http://connect.topcoder-dev.com and find the Bearer token in the request headers using browser dev tools. This command for importing data uses API to create demo data. Which has a few pecularities: - data in DB would be for sure created - data in ElasticSearch Index (ES) would be only created if services [project-processor-es](https://github.com/topcoder-platform/project-processor-es) and [tc-bus-api](https://github.com/topcoder-platform/tc-bus-api) are also started locally. If you don't start them, then imported data wouldn't be indexed in ES, and would be only added to DB. You may start them locally separately, or better use `local/full/docker-compose.yml` as described [next section](#local-deployment-with-other-topcoder-services) which would start them automatically. - - **NOTE** During data importing a lot of records has to be indexed in ES, so you have to wait about 5-10 minutes after `npm run demo-data` is finished until imported data is indexed in ES. You may watch logs of `project-processor-es` to see if its done or no. - -## Test -```bash -npm run test -``` -Tests are being executed with the `NODE_ENV` environment variable has a value `test` and `config/test.js` configuration is loaded. - -Each of the individual modules/services are unit tested. - -### JWT Authentication -Authentication is handled via Authorization (Bearer) token header field. Token is a JWT token. Here is a sample token that is valid for a very long time for a user with administrator role. -``` -eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJhZG1pbmlzdHJhdG9yIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJwc2hhaDEiLCJleHAiOjI0NjI0OTQ2MTgsInVzZXJJZCI6IjQwMTM1OTc4IiwiaWF0IjoxNDYyNDk0MDE4LCJlbWFpbCI6InBzaGFoMUB0ZXN0LmNvbSIsImp0aSI6ImY0ZTFhNTE0LTg5ODAtNDY0MC04ZWM1LWUzNmUzMWE3ZTg0OSJ9.XuNN7tpMOXvBG1QwWRQROj7NfuUbqhkjwn39Vy4tR5I -``` -It's been signed with the secret 'secret'. This secret should match your entry in config/local.js. You can generate your own token using https://jwt.io + - **NOTE** During data importing a lot of records has to be indexed in ES, so you have to wait about 5-10 minutes after `npm run import-from-api` is finished until imported data is indexed in ES. You may watch logs of `project-processor-es` to see if its done or no. -## Deploying with docker (might need updates) +## Run via Docker -**NOTE: This part of README may contain inconsistencies and requires update. Don't follow it unless you know how to properly make configuration for these steps. It's not needed for regular development process.** +1. Build image + ```bash + docker build -t tc_projects_services . + ``` -Build image: -`docker build -t tc_projects_services .` -Run image: -`docker run -p 3000:3000 -i -t -e DB_HOST=172.17.0.1 tc_projects_services` -You may replace 172.17.0.1 with your docker0 IP. +2. Follow all the steps 1 - 4 from [steps to run locally](#steps-to-run-locally). But on the step 2 replace `dockerhost` with the IP address of the host machine from inside the docker container, see [stackoverflow](https://stackoverflow.com/questions/22944631/how-to-get-the-ip-address-of-the-docker-host-from-inside-a-docker-container). + - For **macOS** and **Windows** on Docker 18.03+ this should work: replace `dockerhost` with `host.docker.internal`. -You can paste **swagger.yaml** to [swagger editor](http://editor.swagger.io/) or import **postman.json** and **postman_environment.json** to verify endpoints. +3. Start Project Service via Docker by: + ```bash + docker run -p 8001:3000 -i -t --env-file .env tc_projects_services start + ``` + The project service will be served on http://localhost:8001. + +## NPM Commands + +| Command                    | Description | +|--------------------|--| +| `npm run lint` | Check for for lint errors. | +| `npm run lint:fix` | Check for for lint errors and fix error automatically when possible. | +| `npm run build` | Build source code for production run into `dist` folder. | +| `npm run start` | Start app in the production mode from prebuilt `dist` folder. | +| `npm run start:dev` | Start app in the development mode using `nodemon`. | +| `npm run startKafkaConsumers` | Start Kafka consumer app in production mode from prebuilt `dist` folder. | +| `npm run startKafkaConsumers:dev` | Start Kafka consumer app in the development mode using `nodemon`. | +| `npm run test` | Run tests. | +| `npm run test:watch` | Run tests and re-run them on changes (not useful now as it re-runs all the test). | +| `npm run reset:db` | Recreate Database schemas (removes any existent data). | +| `npm run reset:es` | Recreate Elasticsearch indexes (removes any existent data). | +| `npm run import-from-api` | Import Metadata from DEV environment, see [docs](#import-metadata-from-apitopcoder-devcom-deprecated). | +| `npm run es-db-compare` | Run helper script to compare data in Database and Elasticsearch indexes, see [docs](./scripts/es-db-compare/README.md). | +| `npm run data:export` | Export data from Database to file, see [docs](#đŸ“€-export-data) | +| `npm run data:import` | Import data from file to Database and index it to Elasticsearch, see [docs](#đŸ“„-import-data) | +| `npm run services:up` | Start services via docker-compose for local development. | +| `npm run services:down` | Stop services via docker-compose for local development. | +| `npm run services:logs -- -f ` | View logs of some service inside docker-compose. | +| `npm run local:init` | Recreate Database and Elasticsearch indexes and populate demo data for local development (removes any existent data). | +| `npm run local:reset` | Recreate Database and Elasticsearch indexes (removes any existent data). | +| `npm run babel-node-script -- ` | Helper command which is used by other commands to run node scripts using `babel-node` and `dotenv` so variables from `.env` file are automatically applied. | +| `npm run generate:doc:permissions` | Generate [permissions.html](docs/permissions.html) which later can be viewed by [link](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html). | +| `npm run generate:doc:permissions:dev` | Generate [permissions.html](docs/permissions.html) on any changes (useful during development). | ## Kafka commands @@ -312,6 +335,24 @@ docker exec -it tc-projects-kafka /opt/kafka/bin/kafka-console-producer.sh --bro - Enter or copy/paste the message into the console after starting this command. -## References +## Test +```bash +npm run test +``` +Tests are being executed with the `NODE_ENV` environment variable has a value `test` and `config/test.js` configuration is loaded. + +Each of the individual modules/services are unit tested. + +## JWT Authentication +Authentication is handled via Authorization (Bearer) token header field. Token is a JWT token. Here is a sample token that is valid for a very long time for a user with administrator role. +``` +eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJhZG1pbmlzdHJhdG9yIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJwc2hhaDEiLCJleHAiOjI0NjI0OTQ2MTgsInVzZXJJZCI6IjQwMTM1OTc4IiwiaWF0IjoxNDYyNDk0MDE4LCJlbWFpbCI6InBzaGFoMUB0ZXN0LmNvbSIsImp0aSI6ImY0ZTFhNTE0LTg5ODAtNDY0MC04ZWM1LWUzNmUzMWE3ZTg0OSJ9.XuNN7tpMOXvBG1QwWRQROj7NfuUbqhkjwn39Vy4tR5I +``` +It's been signed with the secret 'secret'. This secret should match your entry in config/local.js. You can generate your own token using https://jwt.io + +## Documentation -- [Projects Service Architecture](./docs/guides/architercture/architecture.md) \ No newline at end of file +- [Projects Service Architecture](./docs/guides/architercture/architecture.md) +- [Permissions Guide](https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/guides/permissions-guide/permissions-guide.md) - what kind of permissions we have, how they work and how to use them. +- [Permissions](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html) - the list of all permissions in Project Service. +- [Swagger API Definition](http://editor.swagger.io/?url=https://raw.githubusercontent.com/topcoder-platform/tc-project-service/develop/docs/swagger.yaml) - click to open it via Online Swagger Editor. diff --git a/config/development.json b/config/development.json index 12dc197a..631024c1 100644 --- a/config/development.json +++ b/config/development.json @@ -2,5 +2,8 @@ "pubsubQueueName": "dev.project.service", "pubsubExchangeName": "dev.projects", "attachmentsS3Bucket": "topcoder-dev-media", - "connectProjectsUrl": "https://connect.topcoder-dev.com/projects/" + "connectProjectsUrl": "https://connect.topcoder-dev.com/projects/", + "fileServiceEndpoint": "https://api.topcoder-dev.com/v3/files/", + "connectProjectsUrl": "https://connect.topcoder-dev.com/projects/", + "memberServiceEndpoint": "https://api.topcoder-dev.com/v3/members" } diff --git a/data/demo-data.json b/data/demo-data.json index 3db5cae6..1de0d5c0 100644 --- a/data/demo-data.json +++ b/data/demo-data.json @@ -1 +1 @@ -{"ProjectTemplate":[{"id":56,"name":"QA & Bug Fixes","key":"generic-1","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"icon","question":"question","info":"info","aliases":["xxx-1","kxxx-2","key-2","key0-4"],"scope":{},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-11T03:06:02.000Z","updatedAt":"2020-04-21T15:12:36.584Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":11,"name":"Development Integration","key":"generic_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"Development Integration","info":"Get help with any part of your app or software","aliases":["generic-development","generic_dev","stest"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Development Integration","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]},"2-dev-iteration-ii":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-22T05:46:23.000Z","updatedAt":"2020-04-21T15:12:36.584Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":72,"name":"Test Project Intake Dev","key":"test_dev_v2_conditional_options","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_dependent_questions_v2_conditional_options","test-dependent-questions-v2-conditional-options"],"scope":{"wizard":{"previousStepVisibility":"readOnly","enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group"},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group"},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox"},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox"}],"description":"","wizard":{"enabled":false},"id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group"},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox"},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"condition":"details.appDefinition.automatedTestingRequired == true","label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"disableCondition":"details.appDefinition.automatedTestingRequired == true","label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"disableCondition":"details.appDefinition.specificDevices contains 'ios'","label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group"},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox"}],"description":"","id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Design Specs Notes","type":"notes"}],"description":"Please answer a few basic questions about your design specs.","wizard":{"enabled":true},"id":"designSpecification","title":"Design Specs","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-19T04:04:56.000Z","updatedAt":"2020-04-21T15:12:36.583Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":118,"name":"API","key":"api_development_new","category":"app_dev","subCategory":null,"metadata":{},"icon":"api","question":"what","info":"why","aliases":["api_development_new","api-development-new"],"scope":{"buildingBlocks":{"FREE_SIZE_API_GATEWAY_NO_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"233","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NOT_NEEDED )"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"api-development","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-development"},"price":"9456","minTime":10,"conditions":"( HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"FREE_SIZE_API_DEVELOPMENT_NO_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"1414","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NOT_NEEDED )"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"api-integration","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-integration"},"price":"2720","minTime":7,"conditions":"( HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"FREE_SIZE_API_GATEWAY_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"5530","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NEEDED )"},"FREE_SIZE_API_INTEGRATION_NO_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"5052","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NOT_NEEDED )"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"api-development","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-development"},"price":"7737","minTime":10,"conditions":"( HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_API_INTEGRATION_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"3866","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NEEDED )"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"api-integration","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-integration"},"price":"8885","minTime":7,"conditions":"( HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_API_DEVELOPMENT_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"2433","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NEEDED )"}},"preparedConditions":{"HAS_API_INTEGRATION_ADDON":"(details.apiDefinition.addons.api contains '{\"productKey\":\"additional-api-integration\"}')","HAS_API_DEVELOPMENT_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-development')","ONE_DELIVERABLE":"( 1 == 1)","HAS_API_INTEGRATION_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-integration')","CA_NEEDED":"(details.apiDefinition.caNeeded == 'yes')","HAS_API_DEVELOPMENT_ADDON":"(details.apiDefinition.addons.api contains '{\"productKey\":\"additional-api-development\"}')","HAS_API_GATEWAY_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-gateway-dev-integration')","CA_NOT_NEEDED":"(details.apiDefinition.caNeeded != 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["FREE_SIZE_API_GATEWAY_NO_CA"],["FREE_SIZE_API_GATEWAY_CA"],["FREE_SIZE_API_INTEGRATION_NO_CA"],["FREE_SIZE_API_INTEGRATION_CA"],["FREE_SIZE_API_DEVELOPMENT_NO_CA"],["FREE_SIZE_API_DEVELOPMENT_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Describe the objectives of your API project in 2-3 sentences.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"API"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

API Gateway Development & Integration utilizes open source tools (Kong, Tyk and API Umbrella) to handle multiple APIs and correctly route/orchestrate multiple API requests. This solution does not include the development of APIs, only the gateway development and integration of up to 5 APIs. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Integration solutions cover integration of up to 5 APIs with a third party API management platform, such as Mulesoft, Apigee, Azure API Management, and AWS API Gateway. This solution does not include the development of APIs, only the integration. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Developmentsolutions cover the development of one API for an existing application. The app does not need to have been built by Topcoder. If you require development of more than one API, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

"},"fieldName":"details.apiDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Gateway Development","description":"Uses open source solutions to handle multiple APIs and correctly route/orchestrate multiple API requests.","label":"API Gateway Development & Integration","value":"api-gateway-dev-integration"},{"summaryLabel":"API Integration","description":"Integrate up to 5 APIs with a third party API management platform.","label":"API Integration","value":"api-integration"},{"summaryLabel":"API Development","description":"Development of 1 API for an existing application. The app does not need to have been built by Topcoder.","label":"API Development","value":"api-development"}],"description":"","theme":"light","validations":"isRequired","title":"What type of API support do you need?","type":"radio-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.description","icon":"question","description":"","title":"Describe your existing APIs.","type":"textbox","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.apiTypes","icon":"question","options":[{"label":"REST","value":"rest"},{"label":"SOAP","value":"soap"},{"label":"RPC","value":"rpc"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What type of APIs do you have?","type":"checkbox-group","summaryTitle":"Existing API Types"},{"condition":"( details.existingAPIDetails.apiTypes contains 'other' )","fieldName":"details.existingAPIDetails.otherAPITypeDetails","icon":"question","description":"","title":"Please describe your APIs","type":"textbox","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.existingAPIDetails.hasEventingSupport == 'yes' )","fieldName":"details.existingAPIDetails.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs use any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.existingAPIDetails.hasLoggingErrorFrameworks == 'yes' )","fieldName":"details.existingAPIDetails.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' )","fieldName":"details.existingAPIDetails.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a technology stack preference?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.existingAPIDetails.hasTechStackPref == 'yes' )","fieldName":"details.existingAPIDetails.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.integrationWith","icon":"question","description":"","title":"What API Gateway should your APIs integrate with?","type":"textbox","summaryTitle":"Integrate With"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.description","icon":"question","description":"","title":"Describe the existing application for which we are developing an API.","type":"textbox","summaryTitle":"Existing Application"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasGateway","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Gateway?","type":"radio-group","summaryTitle":"Gateway"},{"condition":"( details.existingAppDetails.hasGateway == 'yes' )","fieldName":"details.existingAppDetails.gatewayDetails","icon":"question","description":"","title":"Describe your API Gateway","type":"textbox","summaryTitle":"Gateway"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasAPIManager","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Manager?","type":"radio-group","summaryTitle":"API Manager"},{"condition":"( details.existingAppDetails.hasAPIManager == 'yes' )","fieldName":"details.existingAppDetails.apiManagerDetails","icon":"question","description":"","title":"Describe your API Manager","type":"textbox","summaryTitle":"API Manager"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.docStandardPref","icon":"question","options":[{"description":"","label":"Use Topcoder’s standard, OpenAPI","value":"topcoder-standard"},{"description":"","label":"Use an alternate documentation method","value":"other-standard"}],"description":"","theme":"light","title":"What is your preference on API documentation?","type":"radio-group","summaryTitle":"Documentation Standard"},{"condition":"( details.existingAppDetails.docStandardPref == 'other-standard' )","fieldName":"details.existingAppDetails.otherDocStandard","icon":"question","description":"","title":"Describe your desired documentation method","type":"textbox","summaryTitle":"Documentation Method"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.apiConsumers","icon":"question","description":"","title":"Describe the consumers of the API.","type":"textbox","summaryTitle":"API Consumers"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technology stack?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.hasTechStackPref == 'yes' )","fieldName":"details.apiDefinition.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API need to support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.apiDefinition.needEventingSupport == 'yes' )","fieldName":"details.apiDefinition.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API require any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.apiDefinition.needLoggingErrorFrameworks == 'yes' )","fieldName":"details.apiDefinition.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"fieldName":"details.apiDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.apiDefinition.addons.api","allowMultiple":true,"icon":"question","description":"Need more than 5 APIs developed or integrated?","theme":"light","title":"API add-ons","type":"add-ons","category":"api"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-14T04:52:53.000Z","updatedAt":"2020-04-21T15:12:36.584Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":104,"name":"Design, Development & Deployment","key":"app_new","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"Create high-quality designs, develop and/or deploy your app or website","aliases":["app_new","app-new"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"10017","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"3371","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8720","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"5429","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"4546","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"221","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1512","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"3946","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6811","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"8937","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"452","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"7511","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5281","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1074","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9827","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1584","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"3086","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4765","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1038","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"739","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"5039","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4243","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6214","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4917","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8584","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"4859","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"7322","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3078","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8982","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2507","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"8552","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"7386","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9445","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"5695","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"7970","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"2938","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4056","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5797","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"1418","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9462","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"636","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"2862","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7804","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8122","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"5501","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7134","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1195","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9218","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"4213","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5366","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3372","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4832","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8676","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8677","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"2272","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"7340","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8005","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"350","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"773","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7552","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"821","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"7905","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"670","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"5480","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7344","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8401","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7015","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6890","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6130","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8004","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"3259","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9886","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"272","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1760","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9697","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7566","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"920","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6096","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3109","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"2795","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7924","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2620","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5379","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7394","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3916","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"6459","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"6907","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"5114","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4001","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"6276","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7855","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"1857","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3018","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8973","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1218","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"1723","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"4928","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"6740","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3769","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7940","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2542","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"5388","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"5609","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4189","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5475","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3184","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"4319","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"963","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"5348","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9902","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7260","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"4199","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6968","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9241","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"5931","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3026","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"8930","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.progressiveResponsive","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-22T08:55:04.000Z","updatedAt":"2020-04-21T15:12:36.583Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":69,"name":"Test Project Intake Dev","key":"test_dev_v2_none","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_dependent_questions_v2_none","test-dependent-questions-v2-none"],"scope":{"wizard":{"previousStepVisibility":"none","enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Names","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group"},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group"},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox"},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox"}],"description":"","wizard":{"enabled":false},"id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","wizard":{"enabled":false},"id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group"},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox"},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group"},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox"}],"description":"","wizard":{"enabled":true},"id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Design Specs Notes","type":"notes"}],"description":"Please answer a few basic questions about your design specs.","wizard":{"enabled":true},"id":"designSpecification","title":"Design Specs","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-15T04:55:18.000Z","updatedAt":"2020-04-21T15:12:36.585Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":74,"name":"App","key":"app_new","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new-test","app_new_test"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.appType","affectsQuickQuote":true,"icon":"question","options":[{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"},{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Progressive Web App","value":"progressive-web-app","desc":"Progressive Web Apps"},{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"disableCondition":"( details.appDefinition.appType contains 'progressive-web-app' ) || ( details.appDefinition.appType contains 'ios' ) || ( details.appDefinition.appType contains 'android' ) || ( details.appDefinition.appType contains 'desktop' )","iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Responsive Web App","value":"responsive-web-app","desc":"Responsive Web Apps"}],"description":"Select maximum 2 types of app that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.appType contains 'ios' ) || ( details.appDefinition.appType contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"layout":"horizontal","fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"condition":"( details.appDefinition.appType contains 'responsive-web-app' ) || ( details.appDefinition.appType contains 'desktop' )","label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What devices do you need this for?","type":"checkbox-group"},{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":7394,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":9386,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"iconOptions":{"number":"9-15"},"price":257,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development & QA","value":"dev-qa"},{"label":"Design, Development & QA","value":"design-dev-qa"}],"description":"","title":"What kind of deliverables do you need?","type":"radio-group"},{"condition":"( details.appDefinition.deliverables contains 'design' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"I need designs in three days","value":"under-3-days"},{"label":"I need designs in six days","value":"under-6-days"},{"label":"I need a comprehensive design solution","value":"comprehensive-design"}],"description":"","title":"Need a quick turnaround for your designs?","type":"radio-group"},{"condition":"(details.appDefinition.deliverables == 'design' && details.appDefinition.quickTurnaround == 'comprehensive-design')","fieldName":"details.appDefinition.designAddons","icon":"question","description":"","title":"Choose Design add-ons","type":"add-ons","category":"generic","subCategories":["design","qa"]},{"condition":"(details.appDefinition.deliverables == 'dev-qa')","fieldName":"details.appDefinition.devQAAddons","icon":"question","description":"","title":"Choose Dev/QA add-ons","type":"add-ons","category":"generic","subCategories":["dev-qa","security"]},{"condition":"(details.appDefinition.deliverables == 'design-dev-qa')","fieldName":"details.appDefinition.devQAAddons","icon":"question","description":"","title":"Choose Design/Dev/QA add-ons","type":"add-ons","category":"generic","subCategories":["dev-qa","security"]},{"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"},{"fieldName":"details.appDefinition.message","hideTitle":true,"description":"If you are done with requirements for your projects please review and continue to create project.","id":"message","title":"Message","type":"message"}],"description":"","wizard":{"enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-27T10:51:50.000Z","updatedAt":"2020-04-21T15:12:36.585Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":18,"name":"Enterprise Web","key":"enterprise_web","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Enterprise Web","aliases":["enterprise_web","enterprise-web"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"Desktop Web App - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"desktop"},{"label":"Responsive Web App - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive"}],"description":"What type of application are we developing? Please place an X in the Required column for each required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.appIcon","title":"Do you need an app icon designed, or will you provide one?","type":"textbox"}],"description":"","title":"Style Guide & Brand Guidelines - Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles - Please use the fields below to specify the type of users/roles for the application. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":" - Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"help-faws"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStack","title":"Technology Stack - Do you have a preferred technology stack? If yes, please list those requirements here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.users","icon":"question","title":"How many users do you intend to support?","type":"textbox","required":false},{"fieldName":"details.qaTesting.data","icon":"question","options":[{"title":"We will provide obfuscated data","value":"create"},{"title":"Topcoder will create data","value":"provide"}],"title":"Do you intend to supply test data or should Topcoder create it?","type":"slide-radiogroup","required":false},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your app by?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Enterprise Web","required":true}]},"phases":{"enterprise_web":{"duration":10,"name":"Enterprise Web","products":[{"id":7,"productKey":"enterprise_web"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-09T10:25:14.000Z","updatedAt":"2020-04-21T15:12:36.586Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":26,"name":"Zurich Website","key":"website-default","category":"website","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-website.svg","question":"What do you need to Develop?","info":"Design and build the high-impact pages for your blog, online store, or company","aliases":["kubik-website","kubik_website"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"Desktop Web App - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"web"},{"label":"Responsive Web App - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive"},{"label":"Other Software - Any other type of software (i.e backend development, API development, etc.)","value":"other"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"}],"description":"Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions","title":"Style Guide & Brand Guidelines","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.sfdc","title":"SFDC","type":"textbox"},{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"technology-requirements","title":"Technology Requirements","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"Test Data - Should we create test data as part of the project, or will you provide obfuscated test data?","value":"testdata"},{"label":"User Count - How many users do you anticipate the application will have?","value":"usercount"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Website Development","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"Website Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-13T10:54:47.000Z","updatedAt":"2020-04-21T15:12:36.584Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":110,"name":"Development","key":"kubik_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Zurich Mobile App","aliases":["kubik_mobile","kubik-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Briefly describe the application we are developing.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Application Overview","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS mobile application","value":"ios"},{"label":"Android mobile application","value":"android"},{"label":"Desktop web browser application - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"web"},{"label":"Responsive web application - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive"},{"label":"Progressive Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome, but that provides a native mobile app experience (rich features, i.e access device features such as GPS).","value":"progressive"},{"label":"Other","value":"other"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.appType1","icon":"question","options":[{"label":"Native - An app built for phones or tablets using native iOS or Android (vs. a hybrid framework such has Ionic).","value":"native"},{"label":"Hybrid - An app built for phones or tablets using a hybrid framework such has Ionic.","value":"hybrid"}],"description":"","title":"If you need a mobile application, please indicate if it should be native or hybrid ","type":"checkbox-group","required":false,"validationError":"Please let us know the app type"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet Device - Portrait","value":"tablet-device-portrait"},{"label":"Tablet Device - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"If you need a mobile application, please indicate the devices you require the application to work on.","type":"checkbox-group"},{"fieldName":"details.appDefinition.admin","icon":"question","options":[{"label":"Yes","value":"admin-yes"},{"label":"No","value":"admin-no"}],"description":"","title":"Will your application require an admin interface?","type":"radio-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Test Data - Should we create test data as part of the project, or will you provide obfuscated test data?","value":"testdata"},{"label":"User Count - How many users do you anticipate the application will have?","value":"usercount"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$50K","value":"upto-50"},{"title":"$75K","value":"upto-75"},{"title":"$100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T19:30:14.000Z","updatedAt":"2020-04-21T15:12:36.586Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":119,"name":"API","key":"test1_api_template_new","category":"app_dev","subCategory":null,"metadata":{},"icon":"api","question":"what","info":"why","aliases":["test1_api_template_new"],"scope":{"buildingBlocks":{"FREE_SIZE_API_GATEWAY_NO_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"4873","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NOT_NEEDED )"},"FREE_SIZE_API_DEVELOPMENT_NO_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"5766","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NOT_NEEDED )"},"FREE_SIZE_API_GATEWAY_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"8819","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NEEDED )"},"FREE_SIZE_API_INTEGRATION_NO_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"9691","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NOT_NEEDED )"},"FREE_SIZE_API_INTEGRATION_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"5936","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NEEDED )"},"FREE_SIZE_API_DEVELOPMENT_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"2323","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NEEDED )"}},"preparedConditions":{"HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_API_DEVELOPMENT_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-development')","ONE_DELIVERABLE":"( 1 == 1)","HAS_API_INTEGRATION_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-integration')","CA_NEEDED":"(details.apiDefinition.caNeeded == 'yes')","HAS_API_GATEWAY_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-gateway-dev-integration')","CA_NOT_NEEDED":"(details.apiDefinition.caNeeded != 'yes')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["FREE_SIZE_API_GATEWAY_NO_CA"],["FREE_SIZE_API_GATEWAY_CA"],["FREE_SIZE_API_INTEGRATION_NO_CA"],["FREE_SIZE_API_INTEGRATION_CA"],["FREE_SIZE_API_DEVELOPMENT_NO_CA"],["FREE_SIZE_API_DEVELOPMENT_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Describe the objectives of your API project in 2-3 sentences.","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"API"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

API Gateway Development & Integration utilizes open source tools (Kong, Tyk and API Umbrella) to handle multiple APIs and correctly route/orchestrate multiple API requests. This solution does not include the development of APIs, only the gateway development and integration of up to 5 APIs. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Integration solutions cover integration of up to 5 APIs with a third party API management platform, such as Mulesoft, Apigee, Azure API Management, and AWS API Gateway. This solution does not include the development of APIs, only the integration. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Developmentsolutions cover the development of one API for an existing application. The app does not need to have been built by Topcoder. If you require development of more than one API, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

"},"fieldName":"details.apiDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Gateway Development","description":"Uses open source solutions to handle multiple APIs and correctly route/orchestrate multiple API requests.","label":"API Gateway Development & Integration","value":"api-gateway-dev-integration"},{"summaryLabel":"API Integration","description":"Integrate up to 5 APIs with a third party API management platform.","label":"API Integration","value":"api-integration"},{"summaryLabel":"API Development","description":"Development of 1 API for an existing application. The app does not need to have been built by Topcoder.","label":"API Development","value":"api-development"}],"description":"","theme":"light","validations":"isRequired","title":"What type of API support do you need?","type":"radio-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.description","icon":"question","description":"","title":"Describe your existing APIs.","type":"textinput","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.apiTypes","icon":"question","options":[{"label":"REST","value":"rest"},{"label":"SOAP","value":"soap"},{"label":"RPC","value":"rpc"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What type of APIs do you have?","type":"checkbox-group","summaryTitle":"Existing API Types"},{"condition":"( details.existingAPIDetails.apiTypes contains 'other' )","fieldName":"details.existingAPIDetails.otherAPITypeDetails","icon":"question","description":"","title":"Please describe your APIs","type":"textbox","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.existingAPIDetails.hasEventingSupport == 'yes' )","fieldName":"details.existingAPIDetails.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs use any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.existingAPIDetails.hasLoggingErrorFrameworks == 'yes' )","fieldName":"details.existingAPIDetails.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' )","fieldName":"details.existingAPIDetails.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a technology stack preference?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.existingAPIDetails.hasTechStackPref == 'yes' )","fieldName":"details.existingAPIDetails.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.integrationWith","icon":"question","description":"","title":"What API Gateway should your APIs integrate with?","type":"textbox","summaryTitle":"Integrate With"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.description","icon":"question","description":"","title":"Describe the existing application for which we are developing an API.","type":"textbox","summaryTitle":"Existing Application"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasGateway","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Gateway?","type":"radio-group","summaryTitle":"Gateway"},{"condition":"( details.existingAppDetails.hasGateway == 'yes' )","fieldName":"details.existingAppDetails.gatewayDetails","icon":"question","description":"","title":"Describe your API Gateway","type":"textbox","summaryTitle":"Gateway"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasAPIManager","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Manager?","type":"radio-group","summaryTitle":"API Manager"},{"condition":"( details.existingAppDetails.hasAPIManager == 'yes' )","fieldName":"details.existingAppDetails.apiManagerDetails","icon":"question","description":"","title":"Describe your API Manager","type":"textbox","summaryTitle":"API Manager"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.docStandardPref","icon":"question","options":[{"description":"","label":"Use Topcoder’s standard, OpenAPI","value":"topcoder-standard"},{"description":"","label":"Use an alternate documentation method","value":"other-standard"}],"description":"","theme":"light","title":"What is your preference on API documentation?","type":"radio-group","summaryTitle":"Documentation Standard"},{"condition":"( details.existingAppDetails.docStandardPref == 'other-standard' )","fieldName":"details.existingAppDetails.otherDocStandard","icon":"question","description":"","title":"Describe your desired documentation method","type":"textbox","summaryTitle":"Documentation Method"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.apiConsumers","icon":"question","description":"","title":"Describe the consumers of the API.","type":"textbox","summaryTitle":"API Consumers"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technology stack?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.hasTechStackPref == 'yes' )","fieldName":"details.apiDefinition.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API need to support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.apiDefinition.needEventingSupport == 'yes' )","fieldName":"details.apiDefinition.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API require any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.apiDefinition.needLoggingErrorFrameworks == 'yes' )","fieldName":"details.apiDefinition.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new customer to Topcoder and need additional help navigating the crowdsourcing process as Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"fieldName":"details.apiDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-14T07:38:18.000Z","updatedAt":"2020-04-21T15:12:36.586Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":214,"name":"DS Sprint test","key":"ds_sprint_test","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"ds-sprint","question":"DS Sprint","info":"Data Science Sprint","aliases":["ds_sprint_test"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"2194","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"5340","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"941","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"267","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"7922","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"6047","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Sprint"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsSprint.problemStatement","icon":"question","description":"","title":"Describe the problem you would like to solve or the concept you would like to explore.","type":"textbox","summaryTitle":"Problem Concept","required":true,"validationError":"Please, provide problem statement/concept for your project"},{"fieldName":"details.dsSprint.goals","icon":"question","description":"","title":"Expanding on your answer above, what are the one or two most important goals this project should achieve?","type":"textbox","summaryTitle":"Project Goals","required":true,"validationError":"Please, provide goals for your project"},{"fieldName":"details.dsSprint.problemDesc","icon":"question","description":"","title":"Provide a descriptive background of the problem.","type":"textbox","summaryTitle":"Problem Description","required":true,"validationError":"Please, provide descriptive background for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.academicPapers","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Are there academic papers or other sources that should be considered as inputs for your project?","type":"radio-group","summaryTitle":"Academic Papers"},{"condition":"(details.dsSprint.academicPapers == 'yes')","fieldName":"details.dsSprint.urls","icon":"question","description":"","theme":"light","title":"Please list URLs to academic papers or other sources. ","type":"textbox","summaryTitle":"Academic URLs","required":true,"validationError":"Please, provide URLs to your academic papers"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"academicPapers","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.preferredTech","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technologies that should be used for development?","type":"radio-group","summaryTitle":"Do you have Preferred Technology"},{"condition":"( details.dsSprint.preferredTech == 'yes')","fieldName":"details.dsSprint.preferredTechnologies","icon":"question","options":[{"label":"Python","value":"python"},{"label":"R and derivatives","value":"rDerivatives"},{"label":"Jupyter Notebook","value":"jupyter"},{"label":"Java","value":"java"},{"label":"C++","value":"cpp"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"Indicate your preferred technologies","type":"checkbox-group","summaryTitle":"Preferred Technology","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the preffered technologies","required":true},{"condition":"details.dsSprint.preferredTechnologies contains 'other'","fieldName":"details.dsSprint.techPlatforms","icon":"question","description":"","title":"Describe which technologies or platforms you’d like to use","type":"textbox","summaryTitle":"Other Technologies","validationError":"Please, provide technologies or platforms you’d like to use"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"preferredTechnology","type":"questions"},{"hideTitle":true,"questions":[{"condition":"!(details.dsSprint.preferredTechnologies hasLength 0)","fieldName":"details.dsSprint.selectedTechRequired","icon":"question","options":[{"description":"","label":"Required","value":"required"},{"description":"","label":"Optional","value":"optional"}],"description":"","theme":"light","title":"Are the selected technologies required, or optional?","type":"radio-group","summaryTitle":"Technologies Required/Optional ?"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"selectedTechRequired","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.openSourceLibraries","icon":"question","options":[{"description":"","label":"Open source is acceptable","value":"openSourceAcceptable"},{"description":"","label":"Open source is acceptable in general but I want to approve specific libraries","value":"openSourceSpecificLibraries"},{"description":"","label":"Open source is not acceptable","value":"openSourceUnacceptable"}],"description":"","theme":"light","title":"By default, Topcoder will employ open source libraries when the use of them improves outcome or speed.","type":"radio-group","summaryTitle":"Open Source","introduction":"Please indicate your preference for open source libraries."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"openSourceLibraries","type":"questions"},{"hideTitle":true,"questions":[{"minLabel":"See Many Concepts","fieldName":"details.dsSprint.outcome","max":100,"icon":"question","description":"","title":"What outcome is more important?","type":"slider-standard","summaryTitle":"Outcome","maxLabel":"See Best Implementations","required":true,"validationError":"Please provide expected hours of execution","min":1,"theme":"light","step":1,"introduction":"Topcoder’s deliverables can be adjusted to produce many concepts exploring possible solutions to a problem, or to produce focused proofs of concept based on a given technology stack or problem statement. Drag the tab below towards the most appropriate answer."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"outcome","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.dataAvailable","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have data that you can provide?","type":"radio-group","summaryTitle":"Data Available"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataFormat","icon":"question","description":"","title":"Describe the data’s format, size, and the steps you’ll need to take to share it.","type":"textbox","summaryTitle":"Data format & other details"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.pIIData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data contain PII?","type":"radio-group","summaryTitle":"PII Data"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataModifications","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data need to be further obfuscated or privatized","type":"radio-group","summaryTitle":"Data Obfuscated/Privatized"},{"condition":"(details.dsSprint.dataModifications == 'yes')","fieldName":"details.dsSprint.dataModificationsDesc","icon":"question","description":"","theme":"light","title":"Briefly describe the additional obfuscation/privatization required.","type":"textbox","summaryTitle":"Obfuscation/Privatization Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria for deciding winning options"},{"fieldName":"details.dsSprint.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Sprint","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-07-12T11:10:05.000Z","updatedAt":"2020-04-21T15:12:36.587Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":8,"name":"Other Design","key":"generic_design","category":"wireframes","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-other.svg","question":"Other Design","info":"Get help with other types of design","aliases":["generic-design","generic_design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","icon":"question","description":"Brief Description","id":"projectInfo","title":"Description","type":"textbox","required":true,"validationError":"Please provide a description"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Other Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-21T12:16:10.000Z","updatedAt":"2020-04-21T15:12:36.589Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":111,"name":"Performance Testing","key":"kubik-perf-testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-perf-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group"},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group"},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group"},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group"},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.loadDetails.concurrentUsersCount","icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","title":"What is the desired load of concurrent users on the system?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","title":"Approximately how many business processes/transactions will be included in your Performance Test?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","title":"How many hours do you expect the Performance Test to be executed for?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected hours of execution"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Performance Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T10:12:44.000Z","updatedAt":"2020-04-21T15:12:36.589Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":229,"name":"test creation","key":"ds_ideation-test","category":"app_dev","subCategory":null,"metadata":{},"icon":"icon","question":"API & Integrations","info":"API & Integrations","aliases":["test_alias"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-12-21T06:50:06.751Z","updatedAt":"2020-04-21T15:12:36.788Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":212,"name":"Visual Design from PROD (max)","key":"visual_design_prod_from_prod_max","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"product-design-app-visual","question":"Visual Design 1","info":"Create development-ready designs","aliases":["visual_design_prod_from_prod_max"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"1-3"},"price":5785,"icon":"NumberText","title":"screens","value":"1-3","desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"price":4630,"icon":"NumberText","title":"screens","value":"4-8","desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"price":8281,"icon":"NumberText","title":"screens","value":"9-15","desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-06-28T09:25:32.000Z","updatedAt":"2020-04-21T15:12:36.787Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":84,"name":"App","key":"app_new_addons","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"app_new_addons","info":"app_new_addons","aliases":["app_new_addons","app-new-addons"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development","value":"dev-qa"},{"label":"QA","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.deliverables contains 'design' )","fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"label":"I just need concept designs","value":"concept-designs"},{"label":"I need a comprehensive design solution that can be used for development.","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"Yes, I need designs ASAP","value":"under-3-days"},{"label":"A week works for me!","value":"under-6-days"}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.deliverables contains 'design' || details.appDefinition.deliverables contains 'dev-qa' )","fieldName":"details.appDefinition.targetDevices","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"Mobile","value":"mobile","quoteUp":1000,"maxTimeUp":7,"desc":"Mobiles"},{"minTimeUp":5,"icon":"icon-tech-outline-tablet","label":"Tablet","value":"tablet","quoteUp":1000,"maxTimeUp":7,"desc":"Tablets"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Web Browser","value":"web-browser","desc":"Web browser apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"label":"Progressive","value":"progressive"},{"label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":1059,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":134,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"condition":"!(details.appDefinition.quickTurnaround == 'under-3-days')","iconOptions":{"number":"9-15"},"price":9220,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( details.appDefinition.mobilePlatforms contains 'android' )","label":"Google Play","value":"google-play"},{"condition":"( details.appDefinition.targetDevices contains 'desktop' || details.appDefinition.targetDevices contains 'web-browser' )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"condition":"( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-23T02:26:24.000Z","updatedAt":"2020-04-21T15:12:36.587Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":68,"name":"App","key":"app_new","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new","app_new"],"scope":{"preparedConditions":{"ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && ((details.appDefinition.deliverables hasLength 3) || ((details.appDefinition.deliverables hasLength 4) && (details.appDefinition.deliverables contains 'qa')))","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","QUICK_DESIGN_3_Days":"(details.appDefinition.quickTurnaround == 'under-3-days')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 1)","DESIGN_DEV_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 3)","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","QUICK_DESIGN_6_Days":"(details.appDefinition.quickTurnaround == 'under-6-days')","ONLY_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 1) || ((details.appDefinition.deliverables hasLength 2) && (details.appDefinition.deliverables contains 'qa') ))","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DESIGN_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 2) || ((details.appDefinition.deliverables hasLength 3) && (details.appDefinition.deliverables contains 'qa')))","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 1)","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","ONLY_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables hasLength 1)","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","ONLY_DESIGN_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 2)","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')"},"basePriceEstimate":21000,"priceConfig":{"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":55,"price":4312,"minTime":55},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":7416,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":319,"minTime":80},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":12,"price":5295,"minTime":12},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":3,"price":4245,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":52,"price":9520,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":65,"price":2923,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":8850,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":3230,"minTime":59},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":19,"price":3420,"minTime":19},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":2478,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":44,"price":1601,"minTime":44},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":12,"price":5701,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":7609,"minTime":59},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":3588,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":9224,"minTime":62},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":40,"price":3685,"minTime":40},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":22,"price":4126,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":65,"price":7595,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":7903,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":449,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":14,"price":7385,"minTime":14},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":1815,"minTime":78},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":52,"price":3779,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":54,"price":1879,"minTime":54},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":9584,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":7305,"minTime":72},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":10,"price":9172,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":3629,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":1341,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":3141,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":6810,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":85,"price":4405,"minTime":85},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":88,"price":6678,"minTime":88},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":50,"price":8403,"minTime":50},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":8031,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":62,"price":6730,"minTime":62},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":12,"price":543,"minTime":12},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":70,"price":3102,"minTime":70},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)":{"maxTime":40,"price":3326,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":367,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":5189,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":55,"price":7333,"minTime":55},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":2438,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":73,"price":5279,"minTime":73},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":65,"price":7648,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":8018,"minTime":75},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":4100,"minTime":49},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":45,"price":9706,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":8140,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":1317,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":7132,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":60,"price":5984,"minTime":60},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":14,"price":4370,"minTime":14},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":22,"price":8753,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":3369,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":3779,"minTime":72},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":25,"price":9509,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":8249,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":5909,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":1804,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":60,"price":5629,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":3458,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":9054,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":93,"price":9361,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":9215,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":9631,"minTime":75},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":6301,"minTime":62},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":1243,"minTime":49},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":9,"price":262,"minTime":9},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":54,"price":6524,"minTime":54},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":22,"price":5793,"minTime":22},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":25,"price":5295,"minTime":25},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":25,"price":1426,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":7692,"minTime":80},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":40,"price":5253,"minTime":40},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":35,"price":2997,"minTime":35},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":1609,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":3402,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":5917,"minTime":67},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":13,"price":8242,"minTime":13},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":52,"price":2346,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":62,"price":6352,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":73,"price":609,"minTime":73},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":13,"price":2485,"minTime":13},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":3322,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":8352,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":8399,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":4972,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":2449,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":64,"price":2502,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":359,"minTime":54},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":50,"price":6287,"minTime":50},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":90,"price":2443,"minTime":90},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":5470,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":3775,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":2916,"minTime":57},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":10,"price":6654,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":9684,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":9427,"minTime":72},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":35,"price":3590,"minTime":35},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":1087,"minTime":77},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":910,"minTime":49},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":45,"price":2804,"minTime":45},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":70,"price":6442,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":7948,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":2976,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":1151,"minTime":80},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":12,"price":139,"minTime":12},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":8949,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":60,"price":1344,"minTime":60},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":44,"price":4383,"minTime":44},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NEEDED )":{"maxTime":3,"price":7188,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":6870,"minTime":59},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":7379,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":7555,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":9004,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":8488,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":767,"minTime":65},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":40,"price":290,"minTime":40},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NOT_NEEDED )":{"maxTime":3,"price":1817,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":7059,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":6681,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":5529,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":3059,"minTime":67},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":45,"price":7824,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":10013,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":1692,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":85,"price":9721,"minTime":85},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":93,"price":9667,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":47,"price":5644,"minTime":47},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":19,"price":1719,"minTime":19},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":2773,"minTime":54},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":57,"price":8449,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":391,"minTime":72},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)":{"maxTime":45,"price":6072,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":6178,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":88,"price":9398,"minTime":88},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":64,"price":8241,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":8222,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":68,"price":6054,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":9882,"minTime":83},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":40,"price":1473,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":65,"price":9069,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":6187,"minTime":59},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":57,"price":2146,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":9770,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":3164,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":6505,"minTime":57},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NOT_NEEDED )":{"maxTime":6,"price":621,"minTime":6},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":57,"price":4443,"minTime":57},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)":{"maxTime":35,"price":1358,"minTime":35},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":57,"price":5263,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":6652,"minTime":67},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NEEDED )":{"maxTime":6,"price":806,"minTime":6},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":25,"price":5317,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":405,"minTime":83},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":1485,"minTime":78},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)":{"maxTime":35,"price":3993,"minTime":35},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":52,"price":2592,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":6480,"minTime":70},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)":{"maxTime":45,"price":2073,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":5426,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":5831,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":9,"price":8424,"minTime":9},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":3294,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":47,"price":4774,"minTime":47},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)":{"maxTime":40,"price":3926,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":8091,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":1609,"minTime":75},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":3,"price":2375,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":68,"price":1932,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":5734,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":8592,"minTime":65},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":22,"price":539,"minTime":22},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":45,"price":8435,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":6346,"minTime":80},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":9288,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":7908,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":90,"price":7729,"minTime":90},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":60,"price":9951,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":9960,"minTime":54},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":9837,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":5631,"minTime":62}},"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","label":"Design","value":"design"},{"summaryLabel":"Development","label":"App Development","value":"dev-qa"},{"summaryLabel":"QA","label":"QA, Fixes & Enhancements","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed"},{"fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"summaryLabel":"3 days","minTimeUp":0,"description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days","maxTimeUp":0},{"summaryLabel":"7 days","minTimeUp":3,"description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days","maxTimeUp":3}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"layout":"horizontal","condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'ios') )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'android') )","label":"Google Play","value":"google-play"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOnly","enabled":true},"title":"App details","type":"questions"},{"condition":"( (!( details.appDefinition.targetDevices hasLength 1 )) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"fieldName":"details.appDefinition.message","hideTitle":true,"description":"If you are done with requirements for your projects please review and continue to create project.","id":"message","title":"Message","type":"message"}],"wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"project-basic-details","title":"Basic Details"}],"baseTimeEstimateMax":6},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Designs","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-14T11:40:27.000Z","updatedAt":"2020-04-21T15:12:36.590Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":213,"name":"app","key":"app","category":"test-no-id","subCategory":null,"metadata":{},"icon":"app","question":"app","info":"app","aliases":["app"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-07-04T20:12:15.000Z","updatedAt":"2020-04-21T15:12:36.787Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":19,"name":"Topgear","key":"topgear_dev","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Topgear","aliases":["topgear_dev","topgear-dev"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.du","icon":"question","description":"","title":"DU","type":"textbox"},{"fieldName":"details.appDefinition.users.projectCode","icon":"question","title":"Project Code","type":"textbox"},{"fieldName":"details.appDefinition.users.cost_center","icon":"question","title":"Cost Center code","type":"textbox"},{"fieldName":"details.appDefinition.users.ng3","icon":"question","title":"Part of NG3","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Topgear Dev","required":true}]},"phases":{"topgear_dev":{"duration":10,"name":"Topgear","products":[{"id":8,"productKey":"topgear_dev"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-09T10:32:26.000Z","updatedAt":"2020-04-21T15:12:36.588Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":106,"name":"Design","key":"zurich_visual_design_prod","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-app-visual.svg","question":"Visual Design","info":"Create development-ready designs","aliases":["kubik_design","kubik-design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"layout":{"spacing":"codes","direction":"vertical"},"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Briefly describe the application we are designing.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true},{"layout":"vertical","fieldName":"details.loadDetails.designType","icon":"question","options":[{"label":"Concept exploration (Recommended use: when you are looking to quickly explore concepts for an application or website through designs, but are not ready to begin development yet)","value":"concept-exploration"},{"label":"Full application designs (Recommended use: when you need detailed, development-ready designs)","value":"full-application-designs"}],"description":"","title":"Do you need concept exploration design or full application designs that can be development-ready?","type":"radio-group","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"icon":"NumberText","title":"screens","value":"2-4","desc":""},{"iconOptions":{"number":"5-8"},"icon":"NumberText","title":"screens","value":"5-8","desc":""},{"iconOptions":{"number":"9-15"},"icon":"NumberText","title":"screens","value":"9-15","desc":""}],"description":"Please select required option for the total amount of screens/features. If you need more than 15 screens, please indicate this in the Notes section.","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.deviceType","icon":"question","options":[{"label":"Mobile","value":"mobile"},{"label":"Tablet","value":"tablet"},{"label":"Web Browser","value":"web-browser"}],"description":"","title":"Where should your app work?","type":"checkbox-group"},{"fieldName":"details.appDefinition.osType","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"}],"description":"","title":"If you selected Mobile or Tablet in the previous question, please indicate your application type (Optional Question)","type":"checkbox-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"}],"description":"","title":"","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $5K ","value":"upto-5"},{"title":"$10K","value":"upto-10"},{"title":"$15K","value":"upto-15"},{"title":"$20K","value":"upto-20"},{"title":"$25K","value":"upto-25"},{"title":"$25K+","value":"above-25"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"3 Days","value":"3-days"},{"title":"6 Days","value":"6-days"},{"title":"9 Days","value":"9-days"},{"title":"12 Days","value":"12-days"},{"title":"15 Days","value":"15-days"},{"title":"19 Days","value":"19-days"},{"title":"22 Days","value":"22-days"},{"title":"25 Days","value":"25-days"},{"title":"25+ Days","value":"above-25-days"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T10:03:30.000Z","updatedAt":"2020-04-21T15:12:36.588Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":59,"name":"Website","key":"website-default","category":"website","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-website.svg","question":"What do you need to Develop?","info":"Design and build the high-impact pages for your blog, online store, or company","aliases":["website-test","website_development_test"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-mobile.svg","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-tablet.svg","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-desktop.svg","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-watch-apple.svg","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Website Development","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-11T12:07:41.000Z","updatedAt":"2020-04-21T15:12:36.590Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":105,"name":"Prepared conditions","key":"prepared-conditions","category":"app","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"test","aliases":["prepared-conditions"],"scope":{"preparedConditions":{"TARGET_DEVICE_MOBILE":"( details.appDefinition.targetDevices contains 'mobile' )","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","DESIGN_GOAL_CONCEPT_DESIGN":"( details.appDefinition.designGoal == 'concept-designs' )","TARGET_DEVICE_TABLET":"( details.appDefinition.targetDevices contains 'tablet' )","HAS_DEV_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","WANNA_MOBILE_APP":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )"},"basePriceEstimate":21000,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"App Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_QA_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_QA_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_QA_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_QA_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"DESIGN_GOAL_CONCEPT_DESIGN","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"summaryLabel":"3 days","minTimeUp":0,"description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days","maxTimeUp":0},{"summaryLabel":"7 days","minTimeUp":3,"description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days","maxTimeUp":3}],"description":"","theme":"light","validations":"isRequired","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","validationError":"Please, choose your time expectations.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"TARGET_DEVICE_MOBILE || TARGET_DEVICE_TABLET","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"WANNA_MOBILE_APP","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Does your app need to be Native or Hybrid?","type":"radio-group"},{"help":{"linkTitle":"What is responsive?","title":"What is responsive?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Should your web app be progressive or responsive?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'qa')","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'deployment')","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"}],"baseTimeEstimateMax":6},"phases":{"1-dev-iteration-i":{"duration":24,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-23T07:18:51.000Z","updatedAt":"2020-04-21T15:12:36.588Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":9,"name":"Front-end","key":"frontend_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-front-end-dev.svg","question":"Front-end Development","info":"Translate your designs into Web or Mobile front-end","aliases":["frontend-development","frontend_dev"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Front-end","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]},"2-dev-iteration-ii":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-21T12:29:58.000Z","updatedAt":"2020-04-21T15:12:36.589Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":17,"name":"Enterprise Mobile","key":"enterprise_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Enterprise Mobile","aliases":["enterprise_mobile","enterprise-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS App - An app built for iPhone or iPads","value":"ios"},{"label":"Android App - An app built for mobile phones or tablets running Android.","value":"android"},{"label":"Hybrid App - An app built using a hybrid framework (ex. Ionic/Cordova/Xamarin) and exported to one or more operating systems (iOS, Android or both).","value":"hybrid"},{"label":"Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome.","value":"web"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet Device - Portrait","value":"tablet-device-portrait"},{"label":"Tablet Device - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"Form Factor/Orientation","type":"checkbox-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.appIcon","title":"Do you need an app icon designed, or will you provide one?","type":"textbox"}],"description":"","title":"Style Guide & Brand Guidelines - Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles - Please use the fields below to specify the type of users/roles for the application. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":" - Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"help-faws"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStack","title":"Technology Stack - Do you have a preferred technology stack? If yes, please list those requirements here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.users","icon":"question","title":"How many users do you intend to support?","type":"textbox","required":false},{"fieldName":"details.qaTesting.data","icon":"question","options":[{"title":"We will provide obfuscated data","value":"create"},{"title":"Topcoder will create data","value":"provide"}],"title":"Do you intend to supply test data or should Topcoder create it?","type":"slide-radiogroup","required":false},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your app by?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-09T10:00:42.000Z","updatedAt":"2020-04-21T15:12:36.590Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":15,"name":"Salesforce Accelerator","key":"sfdc_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-sfdc-accelerator","question":"What kind of quality assurance (QA) do you need?","info":"SalesForce Testing, Cross browser-device Testing","aliases":["sfdc_testing","sfdc-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief description of your project, Salesforce.com implementation testing objectives","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.components","icon":"question","options":[{"label":"Manual Test packs + Business Models + Automation scripts","value":"pack_one"},{"label":"License for AssureNXT and Tosca for 2 months","value":"pack_two"},{"label":"Customization services to fit the pre-built assets to your specific use cases","value":"pack_three"}],"description":"Full solution will have all the above components, while Partial solution - can have just either the sfdc assets mentioned in option 1 OR SFDC assets + customized service without the license","title":"The Salesforce.com accelerator pack comprises of pre-built test assets and tools/licenses support to enable customization services. Would you like to purchase all the components of the accelerator pack or only a subset of it? (choose all that apply)","type":"checkbox-group","required":true,"validationError":"Please provide the required options"},{"fieldName":"details.appDefinition.functionalities","icon":"question","options":[{"label":"Sales Cloud - Campaign","value":"sales_cloud_campaign"},{"label":"Lead","value":"lead"},{"label":"Account","value":"account"},{"label":"Contact","value":"contact"},{"label":"Opportunity","value":"opportunity"},{"label":"Quote","value":"quote"},{"label":"Contract & Order Management","value":"contract_and_order"},{"label":"Product & Price Book and End to End Processes & Misc Functions (Activites Chatter Reports & Dashboards)","value":"product_price"},{"label":"Service Cloud – Case Management","value":"service_cloud_case_management"}],"description":"","title":"Select the functionalities which are applicable for your Salesforce.com Implementation ( 1 or multiple from the 10 listed below)","type":"checkbox-group"},{"fieldName":"details.appDefinition.lightningExperience.value","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"I Don't Know","value":"Neither"}],"description":"","title":"Are you using the Lightning Experience?","type":"radio-group","required":true}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information such as any existing test automation tool used, known constraints for automation, % of customizations in your Salesforce.com implementation, etc.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later. *AssureNXT - Rapid Test Design Module is a Component of AssureNXT which is a Test Management Platform. It helps in Automated Test Case and Test Data Model generation through business process diagrams. RTD establishes direct relationship between business requirements, process flows and test coverage. Accelerated Test Case generation for changed business process. *Tosca - Tricentis Tosca is a testing tool that is used to automate end-to-end testing for software applications. Tricentis Tosca combines multiple aspects of software testing (test case design, test automation, test data design and generation, and analytics) to test GUIs and APIs from a business perspective","id":"appDefinition","title":"Salesforce Accelerator","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-06T07:38:29.000Z","updatedAt":"2020-04-21T15:12:36.590Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":222,"name":"Design, Development & Deployment","key":"app_new","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop?","info":"Build apps for mobile or web","aliases":["app-new-oct"],"scope":{"buildingBlocks":{"ADMIN_TOOL_DEV_ADDON":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"6363","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON )"},"GOOGLE_ANALYTICS_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7335","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON )"},"API_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1465","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON )"},"SSO_INTEGRATION_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9753","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON )"},"OFFLINE_CAPABILITY_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4430","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON )"},"DESIGN_DIRECTION_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"2977","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON )"},"DESIGN_BLOCK":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"2554","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE )"},"LOCATION_SERVICES_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1598","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON )"},"RUX_BLOCK":{"maxTime":8,"metadata":{"deliverable":"design"},"price":"826","minTime":8,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN )"},"SVC_BLOCK":{"maxTime":0,"metadata":{"deliverable":"dev-qa"},"price":"5580","minTime":0,"conditions":"( HAS_DEV_DELIVERABLE )"},"ZEPLIN_APP_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7593","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON )"},"MAZE_UX_TESTING_ADDON":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"1882","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON )"},"RESP_UI_PROTOTYPE_ADDON":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"874","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON )"},"CI_CD_ADDON":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6676","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON )"},"BLACKDUCK_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5570","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON )"},"QA_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2096","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MOBILE_ENT_SECURITY_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7138","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON )"},"UNIT_TESTING_ADDON":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5725","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON )"},"CONTAINERIZED_CODE_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3393","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON )"},"SMTP_SERVER_SETUP_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4902","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON )"},"RESP_DESIGN_IMPL_ADDON":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"2900","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON )"},"CHECKMARX_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7827","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON )"},"AUTOMATION_TESTING_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"6940","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON )"},"DESIGN_BLOCK_FOR_DEV":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9026","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"UI_PROTOTYPE_ADDON":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7591","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON )"},"SOCIAL_MEDIA_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"122","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON )"},"THIRD_PARTY_INTEGRATION_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"5741","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON )"},"PERF_TESTING_ADDON":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"5227","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON )"},"UAT_ENHANCEMENTS_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1786","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON )"},"WIREFRAMES_ADDON":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"2300","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON )"},"API_INTEGRATION_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"1938","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON )"},"DEV_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"6719","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MIN_BATTERY_USE_IMPL_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5576","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON )"},"BACKEND_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9695","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON )"},"SMS_GATEWAY_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7787","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON )"}},"preparedConditions":{"HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","MOBILITY_SOLUTION":"!(details.appDefinition.mobilePlatforms hasLength 0)","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","MOBILE_DEVICES":"(details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","WEB_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'desktop')","WEB_DEVICE":"(details.appDefinition.targetDevices contains 'web-browser')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CUSTOM_QUOTE":"((details.appDefinition.webBrowserBehaviour == 'responsive' || details.appDefinition.designGoal == 'concept-designs') && !(details.appDefinition.targetDevices hasLength 0 || details.appDefinition.targetDevices hasLength 1)) || details.appDefinition.needAdditionalScreens == 'yes'","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","NEED_ADDITIONAL_SCREENS":"(details.appDefinition.needAdditionalScreens == 'yes')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","RESP_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'responsive')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.webBrowserBehaviour == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","ONLY_ONE_OS_MOBILE":"( details.appDefinition.mobilePlatforms hasLength 1 )","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","ONLY_TWO_OS_BOTH_MOBILES":"(details.appDefinition.mobilePlatforms hasLength 2)","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","IS_WEB_RESP_APP":"(details.appDefinition.webBrowserBehaviour == 'responsive')","CONCEPT_DESIGN":"( )","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","FALSY":"1 == 2","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["CI_CD_ADDON"]],"HAS_DESIGN_DELIVERABLE":[["WIREFRAMES_ADDON"],["UI_PROTOTYPE_ADDON"],["RESP_UI_PROTOTYPE_ADDON"],["ZEPLIN_APP_ADDON"],["DESIGN_DIRECTION_ADDON"],["MAZE_UX_TESTING_ADDON"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON"],["API_INTEGRATION_ADDON"],["OFFLINE_CAPABILITY_ADDON"],["MIN_BATTERY_USE_IMPL_ADDON"],["SMTP_SERVER_SETUP_ADDON"],["BACKEND_DEVELOPMENT_ADDON"],["RESP_DESIGN_IMPL_ADDON"],["ADMIN_TOOL_DEV_ADDON"],["LOCATION_SERVICES_ADDON"],["CONTAINERIZED_CODE_ADDON"],["GOOGLE_ANALYTICS_ADDON"],["SSO_INTEGRATION_ADDON"],["THIRD_PARTY_INTEGRATION_ADDON"],["SMS_GATEWAY_INTEGRATION_ADDON"],["SOCIAL_MEDIA_INTEGRATION_ADDON"],["MOBILE_ENT_SECURITY_ADDON"],["CHECKMARX_SCANNING_ADDON"],["BLACKDUCK_SCANNING_ADDON"],["AUTOMATION_TESTING_ADDON"],["PERF_TESTING_ADDON"],["UNIT_TESTING_ADDON"],["UAT_ENHANCEMENTS_ADDON"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"(HAS_DESIGN_DELIVERABLE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK"],["RUX_BLOCK"]],"(HAS_DESIGN_DELIVERABLE && THREE_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK","DESIGN_BLOCK"]],"(HAS_DESIGN_DELIVERABLE && TWO_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK"]],"MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_TWO_OS_BOTH_MOBILES":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(RESP_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_ONE_OS_MOBILE":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(WEB_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"Designers will produce up to 8 high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"condition":"CONCEPT_DESIGN","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 8 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 8 screens?","required":true},{"condition":"COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 15 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 15 screens?","required":true},{"condition":"(CONCEPT_DESIGN && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"8-16","description":"","label":"8-16 screens","value":"8-16"},{"summaryLabel":"16-24","description":"","label":"16-24 screens","value":"16-24"},{"summaryLabel":"24-32","description":"","label":"24-32 screens","value":"24-32"},{"summaryLabel":"32-40","description":"","label":"32-40 screens","value":"32-40"},{"summaryLabel":"40+","description":"","label":"40+ screens","value":"40+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true},{"condition":"((COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"15-30","description":"","label":"15-30 screens","value":"15-30"},{"summaryLabel":"30-45","description":"","label":"30-45 screens","value":"30-45"},{"summaryLabel":"45-60","description":"","label":"45-60 screens","value":"45-60"},{"summaryLabel":"60+","description":"","label":"60+ screens","value":"60+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Topcoder’s standard concept design solution provides concept designs for one device. If you require concept designs for more than one device, please select all device types required and we will send you a custom proposal.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"CONCEPT_DESIGN","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"( ( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN ) || HAS_DEV_DELIVERABLE)","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (CONCEPT_DESIGN || HAS_DEV_DELIVERABLE) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your designs will be tailored to iOS mobile devices.","label":"iOS","value":"ios"},{"description":"Your designs will be tailored to Android mobile devices.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Should your app use a native or hybrid framework?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( HAS_DEV_DELIVERABLE && ( details.appDefinition.mobilePlatforms contains 'ios' || details.appDefinition.mobilePlatforms contains 'android' ))","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.webBrowserBehaviour","icon":"question","description":"","title":"How should your app work in web browsers?","type":"radio-group","summaryTitle":"Web browser behaviour","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"I want a web app that is responsive to all device types, including desktop.","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"I want a web app that is designed specifically for desktop use.","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"condition":"HAS_DESIGN_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.hasBrandGuidelines","icon":"question","description":"","title":"Do you have required style/brand guidelines?","type":"radio-group","summaryTitle":"Brand Guidelines","validationError":"Please let us know if you have style/brand guildlines?","required":true,"help":{"linkTitle":"Where to Share Style & Branding Guidelines","title":"Where to Share Style & Branding Guidelines","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your style guide or branding guidelines inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificFonts","icon":"question","description":"","title":"Are there particular fonts you want used?","type":"radio-group","summaryTitle":"Specific Fonts","validationError":"Please let us know if you need particular fonts?","required":true,"help":{"linkTitle":"Where to Share Font Preferences","title":"Where to Share Font Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your font preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificColors","icon":"question","description":"","title":"Are there particular colors/themes you want used?","type":"radio-group","summaryTitle":"Specific Colors","validationError":"Please let us know if you need particular colors/theme?","required":true,"help":{"linkTitle":"Where to Share Color/Theme Preferences","title":"Where to Share Color/Theme Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your color/theme preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"design-deliverable-questions","type":"questions"},{"condition":"HAS_DEV_DELIVERABLE","hideTitle":false,"questions":[{"fieldName":"details.techstack.hasLanguagesPref","label":"Programming Languages","title":"","type":"checkbox","summaryTitle":"Languages Pref"},{"condition":"details.techstack.hasLanguagesPref == true","fieldName":"details.techstack.languages","title":"Let us know what programming languages you prefer.","type":"textbox","summaryTitle":"Languages"},{"fieldName":"details.techstack.hasFrameworksPref","label":"Frameworks","title":"","type":"checkbox","summaryTitle":"Frameworks Pref"},{"condition":"details.techstack.hasFrameworksPref == true","fieldName":"details.techstack.frameworks","title":"Let us know what frameworks you prefer.","type":"textbox","summaryTitle":"Frameworks"},{"fieldName":"details.techstack.hasDatabasePref","label":"Database","title":"","type":"checkbox","summaryTitle":"Database Pref"},{"condition":"details.techstack.hasDatabasePref == true","fieldName":"details.techstack.database","title":"Let us know what database you prefer.","type":"textbox","summaryTitle":"Database Pref"},{"fieldName":"details.techstack.hasServerPref","label":"Server","title":"","type":"checkbox","summaryTitle":"Database"},{"condition":"details.techstack.hasServerPref == true","fieldName":"details.techstack.server","title":"Let us know what server you prefer.","type":"textbox","summaryTitle":"Server"},{"fieldName":"details.techstack.hasHostingPref","label":"Hosting Environment","title":"","type":"checkbox","summaryTitle":"Hosting Pref"},{"condition":"details.techstack.hasHostingPref == true","fieldName":"details.techstack.hosting","title":"Let us know what hosting you prefer.","type":"textbox","summaryTitle":"Hosting Environments"},{"fieldName":"details.techstack.noPref","label":"No Preferences","title":"","type":"checkbox","summaryTitle":"No Preference"},{"fieldName":"details.techstack.sourceControl","title":"How do you manage source control?","type":"textbox","summaryTitle":"Source Control"}],"description":"","wizard":{"previousStepVisibility":"readOptimized"},"id":"dev-deliverable-questions","title":"Do you have technology stack preferences?","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"condition":"FALSY && !(CUSTOM_QUOTE)","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"!id","fieldName":"attachments","description":"","id":"files","title":"PLEASE upload any document that can help us in moving ahead with the project","type":"files"},{"condition":"(CUSTOM_QUOTE)","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Topcoder will contact you shortly with a proposal on your project.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2},{"sectionIndex":4}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-10-03T04:21:34.000Z","updatedAt":"2020-04-21T15:12:36.685Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":219,"name":"(Workstreams) Design, Development & Deployment","key":"app_new_workstreams","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"Create high-quality designs, develop and/or deploy your app or website","aliases":["app_new_workstreams"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"524","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"9584","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7667","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"7735","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"9355","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"7571","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8922","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"3017","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2889","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2547","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7598","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"953","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2853","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5602","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5789","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1547","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"6179","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9971","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7557","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"4024","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"6396","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4538","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6234","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5792","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5348","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"4510","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"817","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2476","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2855","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"5131","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"2645","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3058","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1517","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"3054","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"8822","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1644","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6324","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4596","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5544","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1457","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"210","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"5213","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"5641","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2186","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"2123","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7259","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4509","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7518","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"6909","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5167","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2360","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1999","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3838","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9499","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4816","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"853","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"6946","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"3080","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7889","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2662","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2254","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"5216","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1903","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"4101","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1395","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3791","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5129","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4392","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4867","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"2084","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"1006","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9320","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8380","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"5875","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"6987","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5621","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"2494","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9034","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6713","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"8515","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9731","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6507","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7159","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"8386","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9140","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"677","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"6781","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"9185","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9189","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"9172","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5879","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"8918","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1169","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"3531","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"2225","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"411","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"7476","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"7055","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"4389","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"8660","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6452","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7014","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"2591","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4790","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5760","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3022","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9646","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8991","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"3423","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7103","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1875","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"8901","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4297","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3456","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8682","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4836","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"7552","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"workstreamsConfig":{"workstreams":[{"name":"Design Workstream","type":"design"},{"name":"Development Workstream","type":"development"},{"name":"QA Workstream","type":"qa"},{"name":"Deployment Workstream","type":"deployment"}],"projectFieldName":"details.appDefinition.deliverables","workstreamTypesToProjectValues":{"qa":["dev-qa"],"development":["dev-qa"],"design":["design"],"deployment":["deployment"]}}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-07-28T03:26:00.000Z","updatedAt":"2020-04-21T15:12:36.589Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":112,"name":"Testing Automation","key":"kubik_testing_automation","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-testing-automation"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.testingDetails.testCaseCount","icon":"question","options":[{"title":"Up to 50","value":"upto-50"},{"title":"Up to 100","value":"upto-100"},{"title":"100+","value":"above-100"}],"description":"","title":"How many test cases do you anticipate requiring in your automated test suite?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected number of test cases"},{"condition":"details.testingDetails.testCaseCount == 'above-100'","fieldName":"details.testingDetails.customTestCaseCount","title":"Specify how many test cases you need","type":"numberinput"}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Testing Automation","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T10:43:14.000Z","updatedAt":"2020-04-21T15:12:36.588Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":85,"name":"App","key":"app_new","category":"app-test","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new","app_new"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development","value":"dev-qa"},{"label":"QA","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.deliverables contains 'design' )","fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"label":"I just need concept designs","value":"concept-designs"},{"label":"I need a comprehensive design solution that can be used for development.","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"Yes, I need designs ASAP","value":"under-3-days"},{"label":"A week works for me!","value":"under-6-days"}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.deliverables contains 'design' || details.appDefinition.deliverables contains 'dev-qa' )","fieldName":"details.appDefinition.targetDevices","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"Mobile","value":"mobile","quoteUp":1000,"maxTimeUp":7,"desc":"Mobiles"},{"minTimeUp":5,"icon":"icon-tech-outline-tablet","label":"Tablet","value":"tablet","quoteUp":1000,"maxTimeUp":7,"desc":"Tablets"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Web Browser","value":"web-browser","desc":"Web browser apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"label":"Progressive","value":"progressive"},{"label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":5561,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":8964,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"condition":"!(details.appDefinition.quickTurnaround == 'under-3-days')","iconOptions":{"number":"9-15"},"price":5364,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( details.appDefinition.mobilePlatforms contains 'android' )","label":"Google Play","value":"google-play"},{"condition":"( details.appDefinition.targetDevices contains 'desktop' || details.appDefinition.targetDevices contains 'web-browser' )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"condition":"( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-23T09:23:05.000Z","updatedAt":"2020-04-21T15:12:36.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":107,"name":"Buzz","key":"Buzz","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"Buzz","question":"Buzz","info":"Buzz","aliases":["buzzz"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"Budget?","title":"Select the budget using Slide Radio Button","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T10:39:57.000Z","updatedAt":"2020-04-21T15:12:36.679Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":25,"name":"Zurich Salesforce Dev","key":"sfdc_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"product-qa-sfdc-accelerator","question":"What kind of development do you need?","info":"SalesForce Project","aliases":["kubik_sfdc_dev","kubik-sfdc-dev"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please briefly explain what type of application we’re building, the problem it solves and what it should do.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.functionalities","icon":"question","options":[{"label":"Sales Cloud - Campaign","value":"sales_cloud_campaign"},{"label":"Lead","value":"lead"},{"label":"Account","value":"account"},{"label":"Contact","value":"contact"},{"label":"Opportunity","value":"opportunity"},{"label":"Quote","value":"quote"},{"label":"Contract & Order Management","value":"contract_and_order"},{"label":"Product & Price Book and End to End Processes & Misc Functions (Activites Chatter Reports & Dashboards)","value":"product_price"},{"label":"Service Cloud – Case Management","value":"service_cloud_case_management"}],"description":"","title":"","type":"checkbox-group"},{"fieldName":"details.appDefinition.lightningExperience.value","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"I Don't Know","value":"Neither"}],"description":"","title":"Are you using the Lightning Experience?","type":"radio-group","required":true}],"description":"Select the functionalities which are applicable for your Salesforce.com Implementation ( 1 or multiple from the 10 listed below)","id":"questions","title":"Salesforce Details","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.integrationDescription","description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","id":"integrationPoints","title":"","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"","id":"appDefinition","title":"Salesforce Dev","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-13T10:06:10.000Z","updatedAt":"2020-04-21T15:12:36.680Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":27,"name":"Zurich QA/Testing","key":"real_world_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-testing","kubik_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"layout":{"spacing":"codes","direction":"horizontal"},"questions":[{"fieldName":"details.businessUnit","spacing":"spacing-gray-input","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","spacing":"spacing-gray-input","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group"},{"fieldName":"details.appDefinition.deployActions","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"textbox"},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","title":"Are there any other restrictions?","type":"textbox"}],"description":"","id":"application-nformation","title":"Application Information","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"fieldName":"details.appDefinition.structuredTestsHelp","title":"If Structured, do you require help developing the test cases?","type":"textbox"},{"fieldName":"details.appDefinition.prePreparedTestcases","title":"If already have test cases, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox"},{"fieldName":"details.appDefinition.automatedTestingRequired","title":"Will testing be automated (using selenium or similar tools)?","type":"textbox"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group"},{"fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group"},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","title":"Would you like to test on different screen sizes/resolutions? ","type":"textbox"},{"fieldName":"details.appDefinition.geography","title":"Should testing target any specific country or geography?","type":"textbox"}],"description":"","id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.loadDetails.targetAppDescription","description":"In 160 or more characters tell us what is the app, main functions, problem area, etc..","id":"projectInfo","title":"Please provide brief description of the system and/or application you would like to execute Performance Testing on.","type":"textbox"},{"fieldName":"details.loadDetails.concurrentUsersCount","icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","title":"What is the desired load of concurrent users on the system?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","title":"Approximately how many business processes/transactions will be included in your Performance Test?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","title":"How many hours do you expect the Performance Test to be executed for?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected hours of execution"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Website Development","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-13T12:06:18.000Z","updatedAt":"2020-04-21T15:12:36.679Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":28,"name":"Zurich Custom/General Dev","key":"custom_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Custom/General Project","aliases":["kubik_custom","kubik-custom"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please briefly explain what type of application we’re building, the problem it solves and what it should do.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.integrationDescription","description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","id":"integrationPoints","title":"","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.sfdc","title":"SFDC","type":"textbox"},{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Custom Dev","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-20T06:32:23.000Z","updatedAt":"2020-04-21T15:12:36.684Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":113,"name":"Mobility Testing","key":"kubik_mobility_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-mobility-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.testingDetails.targetDevices","title":"What devices would your like mobility testing to be performed on? (Please list up to five device types).","type":"textbox","required":true,"validationError":"Please provide target devices for the testing"}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Mobility Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T10:53:57.000Z","updatedAt":"2020-04-21T15:12:36.677Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":82,"name":"Zurich Custom/General Dev","key":"custom_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Custom/General Project","aliases":["subsection-horizontal-layout","subsection_horizontal_layout"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"layout":{"spacing":"codes","direction":"horizontal"},"questions":[{"fieldName":"details.ccbu.costCentre","spacing":"spacing-gray-input","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Screen name cannot be blank","required":true},{"fieldName":"details.ccbu.businessUnit","spacing":"spacing-gray-input","title":"Business Unit","type":"textinput","required":false}],"id":"questions","title":"Cost Center & Business Unit","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please briefly explain what type of application we’re building, the problem it solves and what it should do.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"layout":{"direction":"horizontal"},"questions":[{"fieldName":"details.ccbu.costCentre2","validations":"isRequired","title":"Normal 1","type":"textinput","validationError":"Screen name cannot be blank","required":true},{"fieldName":"details.ccbu.businessUnit2","title":"Normal 2","type":"textinput","required":false}],"id":"questions","title":"Normal questions but horizontal","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.integrationDescription","description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","id":"integrationPoints","title":"","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.sfdc","title":"SFDC","type":"textbox"},{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Custom Dev","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-04T15:06:23.000Z","updatedAt":"2020-04-21T15:12:36.690Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":114,"name":"Structured Testing","key":"kubik_structured_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-structured-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.structuredTestingDetails.deliverables","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"Select the deliverables you require.","type":"checkbox-group","required":true,"validationError":"Please let us know the testing deliverables."},{"fieldName":"details.structuredTestingDetails.testCount","icon":"question","options":[{"label":"Less than 100","value":"upto-100"},{"label":"Up to 150","value":"upto-150"},{"label":"Up to 300","value":"upto-300"}],"description":"","title":"How many test cases to you anticipate requiring?","type":"checkbox-group","required":true,"validationError":"Please let us know the expected number of test cases."},{"fieldName":"details.structuredTestingDetails.targetDevices","icon":"question","options":[{"label":"Mobile Phones","value":"mobile"},{"label":"Tablet","value":"tablet"},{"label":"Desktop","value":"desktop"},{"label":"Web Browser","value":"web-browser"}],"description":"","title":"Where are we testing?","type":"checkbox-group","required":true,"validationError":"Please let us know the devices where we need to test."}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Structured Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T11:03:51.000Z","updatedAt":"2020-04-21T15:12:36.688Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":209,"name":"TaaS","key":"talent_as_a_service-v1.0","category":"unscoped-solutions","subCategory":null,"metadata":{},"icon":"talent-as-a-service","question":"What type of talent you are looking for?","info":"Talent as a Service","aliases":["talent-as-a-service-v1.0","talent_as_a_service-v1.0"],"scope":{"addonPriceConfig":{},"basePriceEstimate":0,"priceConfig":{},"hidePrice":true,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We are excited to help you get started. All of Topcoder's offerings, pricing and timeline estimates are built on our 15 years of experience and thousands of projects. While we are determining the initial scope here, Topcoder will send a final proposal after our review of your needs.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your talent pool.","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.taasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"","label":"Design","value":"design"},{"summaryLabel":"Development","description":"","label":"Development","value":"dev"},{"description":"","label":"Data Science","value":"data-science"},{"description":"","label":"Quality Assurance","value":"qa"},{"description":"","label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need support?","type":"checkbox-group","summaryTitle":"Talent Area","validationError":"Please, choose what do you need.","required":true},{"condition":"HAS_OTHER_DELIVERABLE","fieldName":"details.taasDefinition.otherBrief","icon":"question","description":"","title":"Please describe the type of talent you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"condition":"HAS_DESIGN_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.taasDefinition.design.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with design talent.","type":"textbox","summaryTitle":"Design Description"},{"skills":{"categoriesMapping":{"design":"DESIGN"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.taasDefinition.skills.design","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What skills are important for your designers to have?","type":"skills","summaryTitle":"Design Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"design-skills","type":"questions"},{"condition":"HAS_DEV_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.taasDefinition.dev.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with development talent.","type":"textbox","summaryTitle":"Dev Description"},{"skills":{"categoriesMapping":{"dev":"DEVELOP"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.taasDefinition.skills.dev","icon":"question","theme":"light","validations":"isRequired","title":"What skills are important for your developers to have?","type":"skills","summaryTitle":"Dev Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"dev-skills","type":"questions"},{"condition":"HAS_DATA_SCIENCE_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DATA_SCIENCE_DELIVERABLE","fieldName":"details.taasDefinition.dataScience.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with data science talent.","type":"textbox","summaryTitle":"DataScience Description"},{"skills":{"categoriesMapping":{"data-science":"DATA_SCIENCE"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_DATA_SCIENCE_DELIVERABLE","fieldName":"details.appDefinition.skills.dataScience","icon":"question","theme":"light","validations":"isRequired","title":"What skills are important for your data scientists to have?","type":"skills","summaryTitle":"DataScience Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"datascience-skills","type":"questions"},{"condition":"HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_QA_DELIVERABLE","fieldName":"details.taasDefinition.qa.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with QA talent.","type":"textbox","summaryTitle":"QA Description"},{"skills":{"categoriesMapping":{"qa":"QA"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.taasDefinition.skills.qa","icon":"question","theme":"light","validations":"isRequired","title":"What skills are important for your testers to have?","type":"skills","summaryTitle":"QA Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"qa-skills","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.fullTimeTalentEstimate","icon":"question","options":[{"title":"Select talent count","value":""},{"title":"5","value":"5"},{"title":"6","value":"6"},{"title":"7","value":"7"},{"title":"8","value":"8"},{"title":"9","value":"9"},{"title":"10","value":"10"},{"title":"11","value":"11"},{"title":"12","value":"12"},{"title":"13","value":"13"},{"title":"14","value":"14"},{"title":"15","value":"15"},{"title":"16","value":"16"},{"title":"17","value":"17"},{"title":"18","value":"18"},{"title":"19","value":"19"},{"title":"20","value":"20"},{"title":"21","value":"21"},{"title":"22","value":"22"},{"title":"23","value":"23"},{"title":"24","value":"24"},{"title":"25","value":"25"},{"title":"25+","value":"25+"}],"description":"","theme":"light","title":"What is the estimated number of full-time talent you are looking to fill?","type":"select-dropdown","summaryTitle":"Full time talent","required":true,"validationError":"Please provide estimated number of full-time talent you are looking to fill."},{"fieldName":"details.taasDefinition.talentRetentionDuration","icon":"question","options":[{"title":"2-3 Months","value":"2-3-months"},{"title":"3-6 Months","value":"3-6-months"},{"title":"3-9 Months","value":"6-9-months"},{"title":"9-12 Months","value":"9-12-months"},{"title":"12+ Months","value":"above-12-months"}],"description":"","theme":"light","title":"How long do you anticipate requiring talent support?","type":"slide-radiogroup","summaryTitle":"Talent Retention","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.taasDefinition.needPrivilegedAccess","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","title":"To accomplish their work, will the talent need provisioned/privileged access to internal environments?","type":"radio-group","required":true,"validationError":"Please let us know if the talent need provisioned/privileged access"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"talent-details","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.needBackgroundChecks","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","title":"Will you require background checks for your talent?","type":"radio-group","required":true,"validationError":"Please let us know if you need background checks for your talent"},{"fieldName":"details.taasDefinition.needCustomNdas","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","title":"Will you require the talent to sign custom NDAs or other specialized agreements?","type":"radio-group","required":true,"validationError":"Please let us know if the talent to sign custom NDAs"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information you would like to include","title":"Notes (optional)","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"tc-services-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Talent Pool Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null,"buildingBlocks":{},"preparedConditions":{"HAS_DATA_SCIENCE_DELIVERABLE":"(details.taasDefinition.deliverables contains 'data-science')","HAS_DESIGN_DELIVERABLE":"(details.taasDefinition.deliverables contains 'design')","HAS_DEV_DELIVERABLE":"(details.taasDefinition.deliverables contains 'dev')","HAS_OTHER_DELIVERABLE":"(details.taasDefinition.deliverables contains 'other')","TRUTHY":"( 1 == 1)","HAS_QA_DELIVERABLE":"(details.taasDefinition.deliverables contains 'qa')","FALSY":"( 1 == 2)"},"showPrice":false,"priceConfig-old":null,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-06-18T07:28:39.000Z","updatedAt":"2020-04-21T15:12:36.688Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":23,"name":"Zurich Mobile","key":"enterprise_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Zurich Mobile App","aliases":["kubik_mobile","kubik-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Briefly describe the application we are developing.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Application Overview","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS App - An app built for iPhone or iPads","value":"ios"},{"label":"Android App - An app built for mobile phones or tablets running Android.","value":"android"},{"label":"Desktop web browser application - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"desktop-web-browser"},{"label":"Responsive web application - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive-web-application"},{"label":"Progressive web application - An app that is accessed by using a mobile web browser like Safari or Chrome, but that provides a native mobile app experience (rich features, i.e access device features such as GPS).","value":"progressive-web-application"},{"label":"Other","value":"other"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"label":"Native - An app built for phones or tablets using native iOS or Android (vs. a hybrid framework such has Ionic). ","value":"native"},{"label":"Hybrid - An app built for phones or tablets using a hybrid framework such has Ionic.","value":"hybrid"}],"description":"","title":"If you need a mobile application, please indicate if it should be native or hybrid","type":"checkbox-group"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet - Portrait","value":"tablet-device-portrait"},{"label":"Tablet - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"If you need a mobile application, please indicate the devices you require the application to work on.","type":"checkbox-group"},{"fieldName":"details.userRoles.requiresAdminInterface","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Will your application require an admin interface?","type":"radio-group"},{"fieldName":"details.integrations.requiresIntegration","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Will your application require integrations to APIs, internal systems, or databases?","type":"radio-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Do you have a preferred technology stack for programming languages, frameworks, database, servers, middleware, API manager or hosting environments?","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"","title":"","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"“Enterprise-Grade Security - Recommended if your application will house or transmit personal information personally identifiable information (PII) or sensitive data, such as financial data or health records. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.employMDMSolution","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","type":"radio-group"},{"condition":"details.qaTesting.employMDMSolution == 'yes'","fieldName":"details.qaTesting.mdmSolution","title":"Mobile Device Management (MDM) Details","type":"textinput"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured Testing - Functional testing performed without test scripts. Users search for their own bugs or usability issues.","value":"rw-unstructured"},{"label":"Real world Structured Testing - Test case creation and execution, covering all functional requirements and cross-browser testing.","value":"rw-structured"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"UAT Test Cycle - Plan a beta test cycle where your company’s users can perform quality assurance testing and bug fixes/enhancements can be implemented based upon user feedback.","value":"uat-cycle"}],"description":"Quality matters to Topcoder. With any development project that Topcoder executes, standard quality assurance practices (Include more description) are included in the delivery process to ensure quality. The options below are additional quality assurance testing that you can include in the scope of your project. Please note that each added feature may incur a cost, but that the cost will be detailed and broken out in the final project proposal.","title":"Quality Assurance","type":"checkbox-group"},{"fieldName":"details.qaTesting.requiresTestDataCreation","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Test Data - Should we create test data as part of the project, or will you provide obfuscated test data?","type":"radio-group"},{"fieldName":"details.qaTesting.userCount","title":"User Count - How many users do you anticipate the application will have?","type":"numberinput"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-12T12:49:27.000Z","updatedAt":"2020-04-21T15:12:36.689Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":66,"name":"Zurich Data Science","key":"kubik_data_science","category":"app_dev","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What do you need to explore?","info":"Data Science projects for Zurich","aliases":["kubik-data-science","kubik_data_science"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox","required":true}],"description":"","id":"appInfo","title":"App Information","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.problemType","description":"For example; Speed up an algorithm? Image Recognition? Use existing data to predict something? Optimization?","title":"What problem is it you’re looking to solve?","type":"textbox"},{"fieldName":"details.appDefinition.milestones","description":"","title":"What kind of key milestones or deadlines do you have?","type":"textbox"},{"fieldName":"details.appDefinition.minPerfThreshold","description":"","title":"Is there a minimum performance threshold you desire?","type":"textbox"},{"fieldName":"details.appDefinition.successDefinition","description":"","title":"What is the definition of success when solving this problem?","type":"textbox"},{"fieldName":"details.appDefinition.deployEnvironment","description":"","title":"What environment would the solution be deployed in?","type":"textbox"},{"fieldName":"details.appDefinition.solutionValue","description":"Think in terms of incremental revenue, reduced cost, time saved, etc.","title":"What is the value that the solution to this problem could bring?","type":"textbox"},{"fieldName":"details.appDefinition.dataAccessRoadBlocks","description":"e.g. HIPPA, Data Use Agreements","title":"Are there any obvious roadblocks to data access? ","type":"textbox"},{"fieldName":"details.appDefinition.exampleData","description":"","title":"Please share an example of your data, either a sample dataset or mock data emulating the structure and type of data we would be using.","type":"textbox"},{"fieldName":"details.appDefinition.stakeholders","description":"","title":"Who are the key stakeholders for this problem? Please provide their information.","type":"textbox"}],"description":"","id":"scopeQuestions","title":"Exploratory Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.technicalRequirements.dataVolume","title":"How much data do you currently have? How many records? How many variables?","type":"textbox"},{"fieldName":"details.technicalRequirements.dataLocationAndTransfer","title":"Where is the data kept and will there be any data transfer obstacles?","type":"textbox"},{"fieldName":"details.technicalRequirements.groundTruthData","title":"Describe the “ground truth” data?","type":"textbox"},{"fieldName":"details.technicalRequirements.dataStructureType","title":"If machine learning or predictive analytics then is the data structured, semi-structured, or unstructured?","type":"textbox"}],"description":"","title":"If this problem involves predictive analytics, image recognition or machine learning then","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.technicalRequirements.currentSolution","title":"Do you have a current solution? If so, how do you measure its effectiveness?","type":"textbox"},{"fieldName":"details.technicalRequirements.triedSolutions","title":"What have you tried so far to solve this problem or improve your current solution? To what degree has it worked? Who has performed this work?","type":"textbox"},{"fieldName":"details.technicalRequirements.improvementBoostNeeded","title":"How much of an improvement in performance relative to your current solution would you like to see?","type":"textbox"},{"fieldName":"details.technicalRequirements.metadata","description":"Business process flow diagrams, data dictionaries, and data are all extremely helpful.","title":"Please share all of the sources of metadata and data we might use for this project.","type":"textbox"},{"fieldName":"details.technicalRequirements.standardProblemPointers","title":"If the problem is a well-researched scientific problem, are there papers or websites you could point us to?","type":"textbox"},{"fieldName":"details.technicalRequirements.dataVariability","description":"e.g., ambient light level, weather conditions, image quality, shape, size, or texture of the object of interest, color versus black and white images, language, speaker, sex of the speaker, time of collection, location of collection, mode of collection, etc.","title":"What are the important sources of variability in the data?","type":"textbox"},{"fieldName":"details.technicalRequirements.deliverables","title":"How will the results be operationalized? Will just the algorithm suffice or will you create a tool yourself, or do you want us to make a tool for you? If the latter, with what other solutions or systems will the tool need to be compatible, and what are the requirements?","type":"textbox"},{"fieldName":"details.technicalRequirements.endUserOfTool","title":"Who will be the ultimate end-user of the tool?","type":"textbox"},{"fieldName":"details.technicalRequirements.productOwnerInOrg","title":"Who will be the owner of the product within the organization?","type":"textbox"},{"fieldName":"details.technicalRequirements.restrictionsAndSPOC","title":"What restrictions, if any, does your organization have on licensing and using third party or open source software solutions? Who in your organization is most familiar with those restrictions, and how can we contact them?","type":"textbox"}],"description":"","title":"Technical Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Data Science","required":true}]},"phases":{"data-science":{"duration":25,"name":"Data Science","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-13T06:23:23.000Z","updatedAt":"2020-04-21T15:12:36.690Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":87,"name":"App","key":"app_new","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new","app_new"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development","value":"dev-qa"},{"label":"QA","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group"},{"condition":"details.appDefinition.deliverables contains 'design' ","fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"label":"I just need concept designs","value":"concept-designs"},{"label":"I need a comprehensive design solution that can be used for development.","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"Yes, I need designs ASAP","value":"under-3-days"},{"label":"A week works for me!","value":"under-6-days"}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.deliverables contains 'design' || details.appDefinition.deliverables contains 'dev-qa' )","fieldName":"details.appDefinition.targetDevices","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"Mobile","value":"mobile","quoteUp":1000,"maxTimeUp":7,"desc":"Mobiles"},{"minTimeUp":5,"icon":"icon-tech-outline-tablet","label":"Tablet","value":"tablet","quoteUp":1000,"maxTimeUp":7,"desc":"Tablets"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Web Browser","value":"web-browser","desc":"Web browser apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"label":"Progressive","value":"progressive"},{"label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":9433,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":4685,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"condition":"!(details.appDefinition.quickTurnaround == 'under-3-days')","iconOptions":{"number":"9-15"},"price":5347,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( details.appDefinition.mobilePlatforms contains 'android' )","label":"Google Play","value":"google-play"},{"condition":"( details.appDefinition.targetDevices contains 'desktop' || details.appDefinition.targetDevices contains 'web-browser' )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"condition":"( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-24T12:21:47.000Z","updatedAt":"2020-04-21T15:12:36.688Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":115,"name":"Unstructured Testing","key":"kubik_unstructured_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-unstructured-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.unstructuredTestingDetails.screenCount","icon":"question","options":[{"label":"Up to 10 screens","value":"upto-10"},{"label":"Up to 30 screens","value":"upto-30"},{"label":"More than 30","value":"above-30"}],"description":"If you require more than 30 screens tested, enter your estimated number of screens in the Notes section prior to submitting your form.","title":"How many screens will be tested?","type":"checkbox-group","required":true,"validationError":"Please let us know the expected number of screens to be tested."},{"fieldName":"details.unstructuredTestingDetails.targetDevices","icon":"question","options":[{"label":"Mobile Phones","value":"mobile"},{"label":"Tablet","value":"tablet"},{"label":"Desktop","value":"desktop"},{"label":"Web Browser","value":"web-browser"}],"description":"","title":"Where are we testing?","type":"checkbox-group","required":true,"validationError":"Please let us know the devices where we need to test."}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Unstructured Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T11:14:35.000Z","updatedAt":"2020-04-21T15:12:36.687Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":29,"name":"Test Project Intake Dev","key":"test_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_custom","test-custom"],"scope":{"wizard":{"enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox","dependent":true}],"description":"","wizard":{"enabled":true},"id":"application-nformation","title":"Application Information","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group","dependent":true},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox","dependent":true},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group","dependent":true},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true}],"description":"","id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","title":"What font style do you prefer? (Pick one)","type":"tiled-radio-group"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","title":"What colors do you like? (Select all that apply)","type":"colors"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","title":"What icon style do you prefer? (Pick one)","type":"tiled-radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","title":"How should your application be built?","type":"checkbox-group"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","title":"Is offline access required for your application?","type":"radio-group"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","title":"What level of security is needed for your application?","type":"radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-22T06:00:28.000Z","updatedAt":"2020-04-21T15:12:36.685Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":238,"name":"User Sentiment Testing","key":"qa_user_sentiment_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"user-sentiment-analysis","question":"What kind of quality assurance (QA) do you need?","info":"Compare applications with competitor products in the market to derive improvement actions.","aliases":["qa_user_sentiment_testing","qa-user-sentiment-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project.","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"User Sentiment Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will user sentiment testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"User Sentiment Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T04:28:19.748Z","updatedAt":"2020-04-21T15:12:36.855Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":220,"name":"QA Services","key":"qa-form-v1a","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"subTextHTML":"","infoHTML":"

Exploratory Testing

Validate functionality and usability of web and mobile apps in-the-wild with real-life users. Detailed report with a list of issues along with:

  • Severity
  • Platform(s)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"Select","detailsLink":"https://www.topcoder.com/case-studies/microsoft/","infoHTML":"

Regression Testing

Validate business-critical workflows with structured testing.

  • Test case creation (if requested)
  • Execution of test cases
  • Validated defect log in Github or Gitlab
  • Screenshots or videos of logged defects
"},{"subTextHTML":"","infoHTML":"

Product Beta Testing/User Acceptance Testing

Expand risk coverage and generate end-user feedback early in the life cycle.

  • Execution of test cases
  • Validated defect log in Github or Gitlab
  • Screenshots or videos of logged defects
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/holiday-readiness-blog/","infoHTML":"

Accessibility Testing

WCAG 2.1 standards-based usability testing to validate end-user experience and ensure digital accessibility.Detailed report with a list of accessibility compliance issues and UX feedback/ recommendations:

  • Severity
  • Screenshots or videos
"},{"subTextHTML":"","infoHTML":"

Compatibility Testing

Cross-browser, device testing including network, geographical coverage to assure app launch success.Detailed report with a list of browser-device compatibility issues by:

  • Severity
  • Platforms/ Devices/ Browsers
  • Steps for reproduction
  • Screenshots or videos of logged defects
"},{"subTextHTML":"","infoHTML":"

Localization/ Language Testing

Validate the product (UI, Content) built for a particular culture or locale settings.Detailed report with a list of issues along with:

  • Severity
  • Platform/ Network/ Geo (any)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/topcoder-structured-test-case/","infoHTML":"

Functional/ Feature Testing

Testing features in an agile environment to speed-up test case design and execution activities. Detailed report with a list of issues along with:

  • Severity
  • Platform(s)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/topcoder-quality-service-mobile-app-testing/","infoHTML":"

Mobile Testing

Execute functional and non-functional tests including device compatibility certification and UX study. Detailed report with a list of issues along with:

  • Severity
  • Platform(s)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/topcoder-automated-testing/","infoHTML":"

Regression Automation

Build reusable test scripts using open source tools (Selenium, Appium, etc.) to accelerate app delivery.

  • Peer-reviewed test scripts and framework
  • Test execution report (if app access is given) or detailed set-up and run test script documentation for your target environment
"}]},"icon":"test","question":"test","info":"Choose the QA solution that meets your testing goals.","aliases":["qa-form-v1"],"scope":{"buildingBlocks":{"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3601","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"8988","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2123","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"4125","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7934","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6368","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6929","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8729","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3716","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5773","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3784","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"6396","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1893","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3411","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"2367","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"5597","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"PERFORMANCE_TESTS":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"6346","minTime":20,"conditions":"(PERFORMANCE_TESTING)"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4818","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"4445","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1311","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7529","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5191","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1316","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"8560","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"1391","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4945","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"905","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"10083","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"140","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"8985","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7005","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9965","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"QA & Testing: Basic Details"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Structured testing is used to deliver our Regression Testing and End-User Acceptance/Beta Testing solutions.

Unstructured testing is used to deliver our Compatibility Testing, Exploratory Testing, Accessibility Testing, Localization/Language Testing, Functional/Feature Testing, and User Sentiment Analysis solutions. Unstructured testing does not use pre-defined test scripts -- this is true “in-the-wild” testing that can provide many forms of feedback on your application.

Regression Automation test suites can be created by Topcoder using tools like Selenium.

Automation Test Suites can be created by Topcoder using tools like Selenium, starting at up to 50 test cases.

Performance Testing by Topcoder will allow you to test several key functions of your application at scale with hundreds of virtual users. Reporting will be provided with specific recommendations to address any performance issues.

Mobility Testing can target up to 5 devices using our community of QA experts.

"},"fieldName":"details.appDefinition.qaType","icon":"question","options":[{"queryParamSelectCondition":"qaType == 'regression'","description":"Validate business-critical workflows in a structured manner","label":"Regression Testing","value":"regression-testing"},{"queryParamSelectCondition":"qaType == 'end-user-acceptance-testing'","summaryLabel":"Acceptance Testing","description":"Expand risk coverage and generate end-user feedback early in the life cycle","label":"End-User Acceptance Testing/Beta Testing ","value":"end-user-acceptance-testing"},{"queryParamSelectCondition":"qaType == 'compatibility-testing'","description":"Cross-browser, device testing including network, geographical coverage to assure app launch success","label":"Compatibility Testing","value":"compatibility-testing"},{"queryParamSelectCondition":"qaType == 'exploratory-testing'","description":"Validate functionality and usability of web and mobile apps in-the-wild with real-life users","label":"Exploratory Testing","value":"exploratory-testing"},{"queryParamSelectCondition":"qaType == 'accessibility-compliance'","description":"WCAG 2.1 standards-based usability testing and verification to confirm and guide to compliance","label":"Accessibility Testing","value":"accessibility-testing"},{"queryParamSelectCondition":"qaType == 'localization-testing'","description":"Validate the product (UI, Content) built for a particular culture or locale settings","label":"Localization/Language Testing","value":"localization-testing"},{"queryParamSelectCondition":"qaType == 'functional-feature-testing'","description":"Testing features in an agile environment to speed-up design and execution activities","label":"Functional/Feature Testing","value":"functional-testing"},{"queryParamSelectCondition":"qaType == 'sentiment-analysis'","description":"Compare applications with competitor products in the market to derive improvement actions","label":"User Sentiment Analysis","value":"sentiment-analysis"},{"queryParamSelectCondition":"qaType == 'regression-automation'","description":"Build reusable test scripts and frameworks using open source tools to accelerate app delivery & improve ROI","label":"Regression Automation","value":"regression-automation"},{"queryParamSelectCondition":"qaType == 'performance-improvement'","description":"Test responsiveness and stability of web and mobile applications under specific workloads","label":"Performance Testing","value":"performance-testing"},{"queryParamSelectCondition":"qaType == 'mobile-app-certification'","description":"Execute functional & non-functional tests including device compatibility certification & competitive analysis","label":"Mobile App Certification","value":"mobile-app-certifcation"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","summaryTitle":"QA Service","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","description":"","title":"What do you need as a part of your regression testing?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"condition":"details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis'","fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 10 screens?","type":"radio-group","validationError":"Please, ley us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-automation'","fieldName":"details.appDefinition.needAdditionalRegressionTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 50 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 50 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalRegressionTests == 'yes'","fieldName":"details.appDefinition.regressionAutomationTestCount","icon":"question","options":[{"label":"50-100","value":"50-100"},{"label":"100-150","value":"100-150"},{"label":"150-200","value":"150-200"},{"label":"200-250","value":"200-250"},{"label":"250-300","value":"250-300"},{"label":"300+","value":"300+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'performance-improvement'","fieldName":"details.appDefinition.concurrentUsers","icon":"question","options":[{"label":"Up to 500","value":"upto-500"},{"label":"500-1000","value":"500-1000"},{"label":"1000-5000","value":"1000-5000"},{"label":"5000+","value":"above-5000"}],"description":"","theme":"light","validations":"isRequired","title":"What is the desired system load of concurrent users?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'performance-improvement'","fieldName":"details.appDefinition.processTransactionCount","icon":"question","options":[{"label":"Up to 5","value":"upto-5"},{"label":"5-10","value":"5-10"},{"label":"10-25","value":"10-25"},{"label":"25+","value":"above-25"}],"description":"","theme":"light","validations":"isRequired","title":"Approximately how many business processes/transactions are included in this performance testing?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"description","icon":"question","description":"","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description"},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"details.appDefinition.qaType != 'performance-testing'","hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-08-23T11:27:40.000Z","updatedAt":"2020-04-21T15:12:36.854Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":231,"name":"Subtitle 2","key":"subtitle2","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ? 1","info":"Build apps for mobile, web, or wearables 123","aliases":["subtitle2"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1514","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9614","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"4587","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3554","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"4392","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"5766","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"2841","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"7907","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"6063","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2814","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9055","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1736","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"9083","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6829","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3452","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1066","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7464","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8208","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"2266","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9094","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"4939","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"8458","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"9654","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3743","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1110","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6041","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9734","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"5218","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"2002","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7308","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8179","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"856","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2556","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"6281","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"1626","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2843","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1230","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"5115","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"9737","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6264","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8703","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4052","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4988","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"6097","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6176","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"9384","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"9072","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"712","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"8132","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6997","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"6283","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"10045","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5600","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9731","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"1537","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6037","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6514","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2959","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4888","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7866","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7662","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"685","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8389","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"2915","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3466","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"8833","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1767","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"3908","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"6091","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"3910","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9041","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3452","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6080","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7327","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8727","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8576","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"4091","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9836","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6170","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4223","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"3906","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3720","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5603","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"1486","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6476","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9693","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"3282","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"9771","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"661","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"8402","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1483","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"8087","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8741","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5326","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4558","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7667","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3741","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"4655","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7234","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"6002","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"6166","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"10084","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"502","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"1006","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"1982","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"3841","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"6212","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9965","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3880","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7255","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"429","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"2078","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9774","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8014","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7265","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"2060","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"8100","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2063","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1150","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7155","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9902","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"1429","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3020","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4852","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4292","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6319","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2654","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"1487","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7371","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"831","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9861","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"457","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"3648","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"778","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4360","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"632","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3951","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8641","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7484","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"5821","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":[{"isFrequent":true,"description":"Java 2 Enterprise Edition","categories":["design","dev-qa","qa"],"title":"J2EE","value":1},{"isFrequent":false,"description":"Java programming language","categories":["dev-qa"],"title":"Java","value":2},{"isFrequent":false,"description":"JavaBean","categories":["qa","deployment"],"title":"JavaBean","value":3},{"isFrequent":true,"description":"Enterprise Java Beans","categories":["deployment"],"title":"EJB","value":4},{"isFrequent":false,"description":"Java ServerPages","categories":["design","dev-qa","qa"],"title":"JSP","value":5},{"isFrequent":false,"description":"Java Servlet technology","categories":["dev-qa"],"title":"Servlet","value":6},{"isFrequent":true,"description":"Java Applets","categories":["qa","deployment"],"title":"Applet","value":7},{"isFrequent":false,"description":"Java Applications","categories":["deployment"],"title":"Java Application","value":8},{"isFrequent":false,"description":"Java Messaging Service","categories":["design","dev-qa","qa"],"title":"JMS","value":9},{"isFrequent":true,"description":"Web Services","categories":["dev-qa"],"title":"Web Services","value":10},{"isFrequent":false,"description":"Microsoft .NET Framework","categories":["qa","deployment"],"title":".NET","value":11},{"isFrequent":false,"description":"Microsoft Visual Basic programming language","categories":["deployment"],"title":"VB","value":12},{"isFrequent":true,"description":"C++ programming language","categories":["design","dev-qa","qa"],"title":"C++","value":13},{"isFrequent":false,"description":"Microsoft Component Object Model","categories":["dev-qa"],"title":"COM","value":14},{"isFrequent":false,"description":"Extensible Markup Language","categories":["qa","deployment"],"title":"XML","value":15},{"isFrequent":true,"description":"XML Style Sheets","categories":["deployment"],"title":"XSL","value":16},{"isFrequent":false,"description":"Hyper Text Markup Language","categories":["design","dev-qa","qa"],"title":"HTML","value":4202325},{"isFrequent":false,"description":"Hyper Text Transfer Protocol","categories":["dev-qa"],"title":"HTTP","value":4202326},{"isFrequent":true,"description":"Microsoft C# programming language","categories":["qa","deployment"],"title":"C#","value":5905414},{"isFrequent":false,"description":"Visual Basic .NET Programming Language","categories":["deployment"],"title":"VB.NET","value":7375010},{"isFrequent":false,"description":"JavaServer Faces","categories":["design","dev-qa","qa"],"title":"JSF","value":14999206},{"isFrequent":true,"description":"Java Mobile","categories":["dev-qa"],"title":"J2ME","value":15035679},{"isFrequent":false,"description":"MIDP 2.0","categories":["qa","deployment"],"title":"MIDP 2.0","value":15035680},{"isFrequent":false,"description":"XUL","categories":["deployment"],"title":"XUL","value":22839202},{"isFrequent":true,"description":"JavaScript","categories":["design","dev-qa","qa"],"title":"JavaScript","value":22839204},{"isFrequent":false,"description":"Microsoft IIS","categories":["dev-qa"],"title":"IIS","value":26740931},{"isFrequent":false,"description":"Oracle 10g","categories":["qa","deployment"],"title":"Oracle 10g","value":26740932},{"isFrequent":true,"description":"Oracle 9i","categories":["deployment"],"title":"Oracle 9i","value":26740933},{"isFrequent":false,"description":"SQL Server","categories":["design","dev-qa","qa"],"title":"SQL Server","value":26753737},{"isFrequent":false,"description":"COM+","categories":["dev-qa"],"title":"COM+","value":26783183},{"isFrequent":true,"description":"Windows Workflow Foundation","categories":["qa","deployment"],"title":"Windows Workflow Foundation","value":26854281},{"isFrequent":false,"description":"Windows Communication Foundation","categories":["deployment"],"title":"Windows Communication Foundation","value":26854283},{"isFrequent":false,"description":"XAML","categories":["design","dev-qa","qa"],"title":"XAML","value":26930935},{"isFrequent":true,"description":"Microsoft SilverLight","categories":["dev-qa"],"title":"Microsoft SilverLight","value":26930938},{"isFrequent":false,"description":"Spring","categories":["qa","deployment"],"title":"Spring","value":26951706},{"isFrequent":false,"description":"Dojo","categories":["deployment"],"title":"Dojo","value":26951708},{"isFrequent":true,"description":"AJAX","categories":["design","dev-qa","qa"],"title":"AJAX","value":26951709},{"isFrequent":false,"description":"Struts","categories":["dev-qa"],"title":"Struts","value":27004060},{"isFrequent":false,"description":"CSS","categories":["qa","deployment"],"title":"CSS","value":27004061},{"isFrequent":true,"description":"Windows Presentation Foundation","categories":["deployment"],"title":"WPF","value":27048250}],"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true,"skillsCategoriesField":"details.appDefinition.deliverables"},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-01-21T03:54:54.954Z","updatedAt":"2020-04-21T15:12:36.792Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":6,"name":"Watson Chatbot","key":"watson_chatbot","category":"chatbot","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-chatbot.svg","question":"Watson Chatbot","info":"Build Chatbot using IBM Watson","aliases":["watson-chatbot"],"scope":{"formTitle":"AI Chatbot with Watson","formDisclaimer":"IBM is receiving compensation from Topcoder for referring customers to Topcoder.","sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.hasBluemixAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do you have an existing IBM Cloud (formerly IBM Bluemix) account?","type":"radio-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.hasChatbot","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Does your organization currently have a chatbot?","type":"radio-group","required":true},{"fieldName":"details.appDefinition.existingChatbotDesc","icon":"question","description":"","title":"If yes, can you provide some brief specifics about your current chatbot?","type":"textbox"},{"fieldName":"details.appDefinition.capabilities","icon":"question","options":[{"label":"Order management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","title":"What capabilities does the chatbot need to support?","type":"checkbox-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.integrationSystems","icon":"question","description":"","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below.","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.existingAgentScripts","icon":"question","description":"","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later).","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.transferToHumanAgents","icon":"question","description":"","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.).","type":"textbox","required":true,"validationError":"Please complete this section"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"Chatbot Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-06-18T07:48:48.000Z","updatedAt":"2020-04-21T15:12:36.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":236,"name":"Regression Automation","key":"qa_regression_automation","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

\n
  • Peer-reviewed test scripts and framework
  • \n
  • Test execution report (if app access is given) or detailed set-up and run test script documentation for your target environment
  • \n
\n
"}]},"icon":"regression-automation","question":"What kind of quality assurance (QA) do you need?","info":"Build reusable test scripts using open source tools (Selenium, Appium, etc.) to accelerate app delivery.","aliases":["qa_regression_automation","qa_-egression-automation"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Regression Automation"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalRegressionTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 50 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 50 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalRegressionTests == 'yes'","fieldName":"details.appDefinition.regressionAutomationTestCount","icon":"question","options":[{"label":"50-100","value":"50-100"},{"label":"100-150","value":"100-150"},{"label":"150-200","value":"150-200"},{"label":"200-250","value":"200-250"},{"label":"250-300","value":"250-300"},{"label":"300+","value":"300+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Regression Automation","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T04:10:25.854Z","updatedAt":"2020-04-21T15:12:36.854Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":31,"name":"Visual Design","key":"cs_visual_design_prod","category":"wireframes","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-app-visual.svg","question":"Visual Design","info":"Create development-ready designs","aliases":["cs_visual_design_prod","cs-visual-design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"1-3"},"price":7199,"icon":"NumberText","title":"screens","value":"1-3","desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"price":6380,"icon":"NumberText","title":"screens","value":"4-8","desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"price":4787,"icon":"NumberText","title":"screens","value":"9-15","desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Visual Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Visual Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:50:29.000Z","updatedAt":"2020-04-21T15:12:36.686Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":32,"name":"Enterprise Mobile","key":"cs_enterprise_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Enterprise Mobile","aliases":["cs_enterprise_mobile","cs-enterprise-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS App - An app built for iPhone or iPads","value":"ios"},{"label":"Android App - An app built for mobile phones or tablets running Android.","value":"android"},{"label":"Hybrid App - An app built using a hybrid framework (ex. Ionic/Cordova/Xamarin) and exported to one or more operating systems (iOS, Android or both).","value":"hybrid"},{"label":"Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome.","value":"web"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet Device - Portrait","value":"tablet-device-portrait"},{"label":"Tablet Device - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"Form Factor/Orientation","type":"checkbox-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.appIcon","title":"Do you need an app icon designed, or will you provide one?","type":"textbox"}],"description":"","title":"Style Guide & Brand Guidelines - Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles - Please use the fields below to specify the type of users/roles for the application. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":" - Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"help-faws"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStack","title":"Technology Stack - Do you have a preferred technology stack? If yes, please list those requirements here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.users","icon":"question","title":"How many users do you intend to support?","type":"textbox","required":false},{"fieldName":"details.qaTesting.data","icon":"question","options":[{"title":"We will provide obfuscated data","value":"create"},{"title":"Topcoder will create data","value":"provide"}],"title":"Do you intend to supply test data or should Topcoder create it?","type":"slide-radiogroup","required":false},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your app by?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:52:22.000Z","updatedAt":"2020-04-21T15:12:36.685Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":241,"name":"Accessibility Testing","key":"qa_accessibilty_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of accessibility compliance issues and UX feedback/ recommendations:

\n
  • Severity
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"accessibility-compliance","question":"What kind of quality assurance (QA) do you need?","info":"WCAG 2.1 standards-based usability testing to validate end-user experience and ensure digital accessibility.","aliases":["qa_accessibilty_testing","qa-accessibilty-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Accessibilty Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will accessibilty testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Accessibilty Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:22:05.951Z","updatedAt":"2020-04-21T15:12:36.854Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":239,"name":"Functional Feature Testing","key":"qa_functional_feature_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"functional-feature-testing","question":"What kind of quality assurance (QA) do you need?","info":"Testing features in an agile environment to speed-up test case design and execution activities.","aliases":["qa_functional_feature_testing","qa-functional-feature-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Functional Feature Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will functional feature testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Functional Feature Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:07:45.239Z","updatedAt":"2020-04-21T15:12:36.854Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":33,"name":"Mobile Application","key":"cs_application_development","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["cs-app","cs_application_development"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","type":"files"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Development Integration","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:55:28.000Z","updatedAt":"2020-04-21T15:12:36.686Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":235,"name":"Performance Improvement Testing","key":"qa_performance_improvement_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"performance-improvement","question":"What kind of quality assurance (QA) do you need?","info":"Test responsiveness and stability of web and mobile applications under specific workloads.","aliases":["qa_performance_improvement_testing","qa-performance-improvement-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Performance Improvement Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.concurrentUsers","icon":"question","options":[{"label":"Up to 500","value":"upto-500"},{"label":"500-1000","value":"500-1000"},{"label":"1000-5000","value":"1000-5000"},{"label":"5000+","value":"above-5000"}],"description":"","theme":"light","validations":"isRequired","title":"What is the desired system load of concurrent users?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.processTransactionCount","icon":"question","options":[{"label":"Up to 5","value":"upto-5"},{"label":"5-10","value":"5-10"},{"label":"10-25","value":"10-25"},{"label":"25+","value":"above-25"}],"description":"","theme":"light","validations":"isRequired","title":"Approximately how many business processes/transactions are included in this performance testing?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Performance Improvement Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T03:55:43.798Z","updatedAt":"2020-04-21T15:12:36.853Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":108,"name":"ritz","key":"ritz","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"ritz","question":"ritz","info":"ritz","aliases":["ritz"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"A project is supposed to be created here, isn't it","id":"projectName","title":"Project Name ","type":"project-name","required":true,"validationError":"Please provide a name for your project - you provide"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description for your project must be provided","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications). Ok off adf dfdsfsdfasdsdfsdfasdfasdf","id":"notes","title":"Notes","type":"notes"}],"description":"A description of the project review project","id":"appDefinition","title":"Project Review Project","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T10:49:27.000Z","updatedAt":"2020-04-21T15:12:36.690Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":224,"name":"Digital As A Service","key":"daas","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"What type of digital service you are looking for?","info":"digital as a service","aliases":["daas"," digital_as_a_service"," diaas"],"scope":{"buildingBlocks":{},"preparedConditions":{"HAS_API_MANAGEMENT_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIManagement')","DATA_ENRICHMENT_REQUIRED":"(details.daasDefinition.apiManagement.dataEnrichment == 'Yes')","HAS_B2B_DELIVERABLE":"(details.daasDefinition.deliverables contains 'b2bServices')","DATA_TRANFORMATION_REQUIRED":"(details.daasDefinition.apiManagement.dataTransformation == 'Yes')","CLOUD_MODEL_REQUIRED":"(details.daasDefinition.a2a.cloudModel == 'other')","HAS_A2A_DELIVERABLE":"(details.daasDefinition.deliverables contains 'a2aServices')","HAS_OTHER_PROTOCOL":"(details.daasDefinition.protocols == 'Other')","TRUTHY":"( 1 == 1)","CLOUD_DEPLOYMENT_PREFERENCE":"(details.daasDefinition.a2a.deploymentPref == 'other')","HAS_API_MICROSERVICE_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIAndMicroservice')","FILE_TRANSFER_REQUIRED":"(details.daasDefinition.fileTransfer == 'Yes')","FALSY":"( 1 == 2)"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Title your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.daasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"B2BServices","description":"Automation of business processes and communication/data exchange between two or more organizations.","label":"Business to Business Services","value":"b2bServices"},{"summaryLabel":"A2AServices","description":"Integration between applications.","label":"Application to Application Services","value":"a2aServices"},{"summaryLabel":"API & Microservice","description":"Enable integration and modernization of applications using gateways and microservices framework.","label":"API Implementation & Microservices","value":"APIAndMicroservice"},{"summaryLabel":"API Management","description":"The API governing process for a secure and scalable environment, using tools like APIGEE, Layer 7, IBM API Connect, etc.","label":"API Management","value":"APIManagement"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"radio-group","summaryTitle":"Solution Needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"condition":"HAS_B2B_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Understanding the number of partner organizations that will be onboarded provides context on:
- Number of organization profiles to be configured
- Number of partner profiles
- Number of security methods to be configured
- Number of defined contracts for trading partners

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.b2b.partnerOrgs","icon":"question","description":"","title":"How many partner organizations will be onboarded?","type":"textbox","summaryTitle":"Partner Orgs","required":true,"validationError":"Please, describe your partner orgnizations"},{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Knowing this highlights the number of unique interfaces that will need to be designed and developed, as well as how many will require scheduling and configuration.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.interfaces","icon":"question","description":"","title":"How many interfaces will need to be developed?","type":"textbox","summaryTitle":"Interfaces","required":true,"validationError":"Please, describe interfaces to be developed"},{"help":{"linkTitle":"Why is this important?","title":"Why is this important?","content":"

The type of protocol indicates how the business to business services will be connected and communicate.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.protocols","icon":"question","options":[{"summaryLabel":"AS2","description":"","label":"AS2","value":"AS2"},{"summaryLabel":"AS4","description":"","label":"AS4","value":"AS4"},{"summaryLabel":"Webservice","description":"","label":"Webservice","value":"Webservice"},{"summaryLabel":"SFTP","description":"","label":"SFTP","value":"SFTP"},{"summaryLabel":"Other","description":"","label":"Other","value":"Other"}],"description":"","theme":"light","title":"What type of protocol should be used?","type":"radio-group","summaryTitle":"Protocol","required":true,"validationError":"Please, select the protocol"},{"condition":"HAS_B2B_DELIVERABLE && HAS_OTHER_PROTOCOL","fieldName":"details.daasDefinition.protocolDesc","icon":"question","description":"","title":"Describe your desired protocol?","type":"textbox","summaryTitle":"Other desc","required":true,"validationError":"Please, describe other protocol"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.maps","icon":"question","description":"","title":"How many maps will need to be developed?","type":"textbox","summaryTitle":"Maps","required":true,"validationError":"Please, describe maps"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.fileTransfer","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":" Will you need managed file transfer services?","type":"radio-group","summaryTitle":"File transfer","required":true,"validationError":"Please, select one option"},{"condition":"HAS_B2B_DELIVERABLE && FILE_TRANSFER_REQUIRED","fieldName":"details.daasDefinition.fileSize","icon":"question","description":"","title":"What is the maximum size of file to transfer? ?","type":"textbox","summaryTitle":"File Size","required":true,"validationError":"Please, provide the size of file"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"b2b-solution","type":"questions"},{"condition":"HAS_A2A_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking?","content":"

Interface or integration service enables the communication of disparate software components.

"},"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.interfaces","icon":"question","description":"","title":"How many interfaces or integration services are in scope?","type":"textbox","summaryTitle":"Interfaces/Services","required":true,"validationError":"Please, describe how many interfaces are in scope"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.mappingFields","icon":"question","description":"","title":"How many fields require mapping?","type":"textbox","summaryTitle":"mapping fields","required":true,"validationError":"Please, describe mapping fields"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.destinationEndPoints","icon":"question","description":"","title":"How many destination end points are there?","type":"textbox","summaryTitle":"Destination End Points","required":true,"validationError":"Please, provide the destination end points"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataTransformMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data transformation method?","type":"radio-group","summaryTitle":"Data Transformation Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.orchestrationMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data process or service orchestration method?","type":"radio-group","summaryTitle":"Orchestration Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data enrichment be required?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.securityScheme","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will security scheme implementation be required?","type":"radio-group","summaryTitle":"Security Scheme","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.businessRule","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will business rule implementation be required?","type":"radio-group","summaryTitle":"Business Rule","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.hybridIntegration","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Is hybrid integration required?","type":"radio-group","summaryTitle":"Hybrid Integration","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.cloudModel","icon":"question","options":[{"label":"IaaS","value":"iaas"},{"label":"PaaS","value":"paas"},{"label":"SaaS","value":"saas"},{"label":"Multi-cloud","value":"multiCloud"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What cloud model are you using in the application layer?","type":"radio-group","summaryTitle":"Cloud Model","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_MODEL_REQUIRED","fieldName":"details.daasDefinition.a2a.cloudModelDesc","icon":"question","description":"","title":"Describe your cloud model","type":"textbox","summaryTitle":"Cloud Model","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.deploymentPref","icon":"question","options":[{"label":"On-premise","value":"onPremise"},{"label":"On-cloud","value":"onCloud"},{"label":"iPaaS","value":"ipaas"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What is your cloud deployment preference?","type":"radio-group","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_DEPLOYMENT_PREFERENCE","fieldName":"details.daasDefinition.a2a.cloudDeploymentDesc","icon":"question","description":"","title":"Describe your cloud deployment preference","type":"textbox","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.serviceContainerization","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does your services need to be containerized?","type":"radio-group","summaryTitle":"Service Containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"a2a-solution","type":"questions"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.count","icon":"question","description":"","title":"How many APIs & microservices require development?","type":"textbox","summaryTitle":"APIs & Microservices","required":true,"validationError":"Please, describe APIs & microservices to be developed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.restOperations","icon":"question","description":"","title":"How many REST operations will be exposed?","type":"textbox","summaryTitle":"REST Operations","required":true,"validationError":"Please, describe REST operations to be exposed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dbTables","icon":"question","description":"","title":"How many database tables will be queried?","type":"textbox","summaryTitle":"Database Tables","required":true,"validationError":"Please, describe database tables to be queried?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.modelClasses","icon":"question","description":"","title":"How many model classes need to be developed?","type":"textbox","summaryTitle":"Model Classes","required":true,"validationError":"Please, describe model classes to be developed?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.methods","icon":"question","description":"","title":"How many methods are in the service layer?","type":"textbox","summaryTitle":"Service Layer Methods","required":true,"validationError":"Please, describe methods in the service layer"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.externalAPIs","icon":"question","description":"","title":"How many external APIs or services will be utilized?","type":"textbox","summaryTitle":"External APIs","required":true,"validationError":"Please, describe external APIs"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.requestFields","icon":"question","description":"","title":"How many fields are in the request?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.validatedFields","icon":"question","description":"","title":"How many request fields require validation?","type":"textbox","summaryTitle":"Validated Request Fields","required":true,"validationError":"Please, describe validated request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.responseFields","icon":"question","description":"","title":"How many fields are in the response?","type":"textbox","summaryTitle":"Response Fields","required":true,"validationError":"Please, describe response fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.commProtocol","icon":"question","description":"","title":"What inter-service communication protocol should be used?","type":"textbox","summaryTitle":"InterService Comm Protocol","required":true,"validationError":"Please, describe inter-service communication protocol"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dataCaching","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data caching be required?","type":"radio-group","summaryTitle":"Data Caching","required":true,"validationError":"Please, select one option"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.serviceContainers","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do services need to be containerized?","type":"radio-group","summaryTitle":"Service containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiImplementationAndMicroservice-solution","type":"questions"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.count","icon":"question","description":"","title":"How many APIs will be exposed?","type":"textbox","summaryTitle":"APIs","required":true,"validationError":"Please, describe APIs to be exposed"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.requstFields","icon":"question","description":"","title":"How many request fields are in the APIs?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.serviceCalls","icon":"question","description":"","title":"How many backend service calls are expected?","type":"textbox","summaryTitle":"Backend Service Calls","required":true,"validationError":"Please, describe backend service calls"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataTransformation","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data transformation?","type":"radio-group","summaryTitle":"Data Transformation","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_TRANFORMATION_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.tranformationFields","icon":"question","description":"","title":"How many fields require data transformation?","type":"textbox","summaryTitle":"Data Tranform Fields","required":true,"validationError":"Please, describe fields require for data transformation"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data enrichment?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_ENRICHMENT_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.enrichmentFields","icon":"question","description":"","title":"How many fields require data enrichment?","type":"textbox","summaryTitle":"Data Enrichment Fields","required":true,"validationError":"Please, describe fields require for data enrichment"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.communicationProtocol","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does the communication protocol require transformation?","type":"radio-group","summaryTitle":"Communication Protocol","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiManagement-solution","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Digital As A Service","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-10-30T04:03:50.000Z","updatedAt":"2020-04-21T15:12:36.689Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":95,"name":"New app - updated design 2","key":"app-new-updated-designs-2","category":"app","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"test","aliases":["app-new-updated-designs-2","anud2"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8859","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5465","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"4282","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"956","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"6225","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"1329","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"2466","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"3301","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"3947","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6979","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9133","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7679","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"192","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1611","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"357","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6431","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6847","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9847","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"1604","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"808","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9406","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"8566","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"3864","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4655","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9016","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7231","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"333","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"3043","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"5741","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1834","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2362","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2095","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"4300","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"1450","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"2367","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2380","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8739","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"8622","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"3124","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5652","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9474","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7248","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6880","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"6910","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6695","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2353","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"2170","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3974","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"5138","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3057","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"1173","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2074","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1882","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1448","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"1465","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2979","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"914","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4828","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7130","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5274","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4699","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9553","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"6478","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"3582","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3348","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4401","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7166","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"5159","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"5583","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"4036","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6737","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4066","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7821","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3748","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8378","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"234","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5056","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3009","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1825","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7635","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"6840","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2788","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"754","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"4333","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5637","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8490","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"3471","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"6661","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"9848","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"8641","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1648","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"1911","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6002","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1596","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5580","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9113","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"432","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"2847","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1996","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"8986","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8681","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"1200","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7116","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"7167","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8463","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"7965","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"378","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5415","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6700","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9169","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4935","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1173","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9484","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"265","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5922","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"7326","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"1993","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3422","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"3937","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4526","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3823","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"2196","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1340","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"2248","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"1225","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4894","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7633","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"1900","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2852","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"2249","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"8869","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"10079","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"6035","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"1308","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8019","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3495","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5059","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"5565","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9045","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"4017","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":21000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":24,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-02-21T11:45:39.000Z","updatedAt":"2020-04-21T15:12:36.691Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":7,"name":"Visual Design","key":"visual_design_prod","category":"wireframes","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-app-visual.svg","question":"Visual Design","info":"Create development-ready designs","aliases":["visual_design_prod","visual-design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"1-3"},"price":6794,"icon":"NumberText","title":"screens","value":"1-3","desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"price":7117,"icon":"NumberText","title":"screens","value":"4-8","desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"price":6783,"icon":"NumberText","title":"screens","value":"9-15","desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Visual Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Visual Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-21T12:06:56.000Z","updatedAt":"2020-04-21T15:12:36.685Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":94,"name":"New App with Updated designs","key":"app-new-updated-designs","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new-updated-designs"],"scope":{"buildingBlocks":{"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"price":"987","minTime":40,"conditions":"( (HAS_DEV_DELIVERABLE || HAS_QA_DELIVERABLE) && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"MEDIDUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"price":"7874","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"price":"6538","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"price":"2191","minTime":45,"conditions":"( (HAS_DEV_DELIVERABLE || HAS_QA_DELIVERABLE) && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"price":"5515","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"price":"4157","minTime":35,"conditions":"( (HAS_DEV_DELIVERABLE || HAS_QA_DELIVERABLE) && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"}},"preparedConditions":{"ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && ((details.appDefinition.deliverables hasLength 3) || ((details.appDefinition.deliverables hasLength 4) && (details.appDefinition.deliverables contains 'qa')))","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","QUICK_DESIGN_3_Days":"(details.appDefinition.quickTurnaround == 'under-3-days')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 1)","DESIGN_DEV_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 3)","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","QUICK_DESIGN_6_Days":"(details.appDefinition.quickTurnaround == 'under-6-days')","ONLY_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 1) || ((details.appDefinition.deliverables hasLength 2) && (details.appDefinition.deliverables contains 'qa') ))","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DESIGN_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 2) || ((details.appDefinition.deliverables hasLength 3) && (details.appDefinition.deliverables contains 'qa')))","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 1)","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","ONLY_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables hasLength 1)","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_DESIGN_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 2)","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","ONLY_DEV_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 1)"},"priceConfig-old":{"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":55,"price":5652,"minTime":55},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":90,"price":2332,"minTime":90},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":6495,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":1549,"minTime":80},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":12,"price":4061,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":8211,"minTime":72},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":3,"price":3392,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":52,"price":2186,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":4918,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":9924,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":5966,"minTime":59},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":19,"price":4501,"minTime":19},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":45,"price":5340,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":7570,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":8592,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":44,"price":2386,"minTime":44},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":1266,"minTime":67},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":12,"price":9883,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":6705,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":64,"price":5236,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":10020,"minTime":52},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":22,"price":748,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":4380,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":65,"price":1679,"minTime":65},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":30,"price":5053,"minTime":30},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":88,"price":5692,"minTime":88},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":1815,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":14,"price":8082,"minTime":14},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":2465,"minTime":62},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":52,"price":4015,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":3133,"minTime":59},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":3351,"minTime":49},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":2521,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":2874,"minTime":72},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":10,"price":1310,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":4143,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":3279,"minTime":62},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":30,"price":644,"minTime":30},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":7260,"minTime":72},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":50,"price":6086,"minTime":50},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":54,"price":6728,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":980,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":62,"price":2152,"minTime":62},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":12,"price":2696,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":3144,"minTime":57},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":4059,"minTime":49},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)":{"maxTime":40,"price":5007,"minTime":40},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":6506,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":2580,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":55,"price":5320,"minTime":55},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":5314,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":3662,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":73,"price":3452,"minTime":73},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":916,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":9290,"minTime":83},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":7850,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":60,"price":9237,"minTime":60},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":14,"price":6892,"minTime":14},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":22,"price":5972,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":9073,"minTime":62},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":9543,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":70,"price":2329,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":3926,"minTime":54},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":25,"price":1139,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":6657,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":8370,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":7619,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":5554,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":1723,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":60,"price":3581,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":1064,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":4943,"minTime":62},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":40,"price":4435,"minTime":40},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":4144,"minTime":49},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":9,"price":8758,"minTime":9},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":5805,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":7732,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":22,"price":2396,"minTime":22},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":25,"price":2027,"minTime":25},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":25,"price":5802,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":328,"minTime":80},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":40,"price":9459,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":3186,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":85,"price":2163,"minTime":85},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":8262,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":5565,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":8355,"minTime":67},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":13,"price":5494,"minTime":13},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":52,"price":3640,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":62,"price":9981,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":73,"price":1254,"minTime":73},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":13,"price":6467,"minTime":13},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":3125,"minTime":75},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":1598,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":678,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":5532,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":5946,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":1709,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":4102,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":93,"price":5240,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":5535,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":8528,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":9225,"minTime":54},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":50,"price":5099,"minTime":50},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":3710,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":90,"price":1730,"minTime":90},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":2568,"minTime":59},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":10,"price":4025,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":3117,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":88,"price":6127,"minTime":88},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":45,"price":2439,"minTime":45},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":40,"price":7908,"minTime":40},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":45,"price":5247,"minTime":45},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":12,"price":9246,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":8673,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":2141,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":8888,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":60,"price":1743,"minTime":60},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":44,"price":8299,"minTime":44},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NEEDED )":{"maxTime":3,"price":8957,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":7123,"minTime":59},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":93,"price":9008,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":2716,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":327,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":537,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":2719,"minTime":49},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NOT_NEEDED )":{"maxTime":3,"price":5203,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":5614,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":6836,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":47,"price":4228,"minTime":47},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":19,"price":333,"minTime":19},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":57,"price":149,"minTime":57},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)":{"maxTime":45,"price":9711,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":68,"price":7256,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":3286,"minTime":80},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":40,"price":750,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":65,"price":3268,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":57,"price":730,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":7401,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":3508,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":6764,"minTime":57},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NOT_NEEDED )":{"maxTime":6,"price":3854,"minTime":6},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":57,"price":578,"minTime":57},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)":{"maxTime":35,"price":878,"minTime":35},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":57,"price":8592,"minTime":57},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":65,"price":9659,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":7157,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":1057,"minTime":67},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NEEDED )":{"maxTime":6,"price":4673,"minTime":6},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":25,"price":708,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":8225,"minTime":78},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)":{"maxTime":35,"price":4434,"minTime":35},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":52,"price":6125,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":4293,"minTime":70},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)":{"maxTime":45,"price":8411,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":7709,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":3242,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":9,"price":8242,"minTime":9},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":2465,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":47,"price":463,"minTime":47},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)":{"maxTime":40,"price":9183,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":85,"price":5794,"minTime":85},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":10074,"minTime":75},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":3,"price":9150,"minTime":3},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":70,"price":6190,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":54,"price":8600,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":5579,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":65,"price":8208,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":68,"price":3914,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":64,"price":5775,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":3181,"minTime":65},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":22,"price":2748,"minTime":22},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":45,"price":3886,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":507,"minTime":80},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":2691,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":7776,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":480,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":60,"price":8268,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":4587,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":3624,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":1850,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":4091,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":9265,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":5535,"minTime":62}},"basePriceEstimate":21000,"priceConfig":[{"blocks":["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],"conditions":"ONE_DELIVERABLE"},{"blocks":["SMALL_DEV_ONE_OS_NO_CA"],"conditions":"ONE_DELIVERABLE"},{"blocks":["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],"conditions":"TWO_DELIVERABLES"}],"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","label":"Design","value":"design"},{"summaryLabel":"Development","label":"App Development","value":"dev-qa"},{"summaryLabel":"QA","label":"QA, Fixes & Enhancements","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'design') && (!(details.appDefinition.deliverables contains 'dev-qa'))","options":[{"summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"summaryLabel":"3 days","minTimeUp":0,"description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days","maxTimeUp":0},{"summaryLabel":"7 days","minTimeUp":3,"description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days","maxTimeUp":3}],"description":"","theme":"light","validations":"isRequired","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","validationError":"Please, choose your time expectations.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Does your app need to be Native or Hybrid?","type":"radio-group"},{"help":{"linkTitle":"What is responsive?","title":"What is responsive?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Should your web app be progressive or responsive?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","theme":"light","validations":"isRequired","title":"How many screens do you need?","type":"radio-group","validationError":"Please let us know the number of screens required?","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"hideTitle":true,"questions":[{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'ios') )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'android') )","label":"Google Play","value":"google-play"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"( (!( details.appDefinition.targetDevices hasLength 1 )) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"fieldName":"details.appDefinition.message","hideTitle":true,"description":"If you are done with requirements for your projects please review and continue to create project.","id":"message","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Sample project timeline","deliverables":[{"duration":3,"id":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'design')","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"generic"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'development')","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"generic"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'qa')","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"generic"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'deployment')","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"gtest"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Sample project timeline","deliverables":[{"duration":3,"id":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-02-19T12:26:37.000Z","updatedAt":"2020-04-21T15:12:36.690Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":223,"name":"QA Services","key":"qa-v1.2","category":"unscoped-solutions","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Choose the QA solution that meets your testing goals.","aliases":["qa-oct"],"scope":{"buildingBlocks":{"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3787","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"1221","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"244","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"990","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4146","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9559","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1983","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"228","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"1599","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"611","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4947","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"1226","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"955","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1298","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"7578","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1546","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"PERFORMANCE_TESTS":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"5694","minTime":20,"conditions":"(PERFORMANCE_TESTING)"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3770","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"1612","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3795","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4301","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5985","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3219","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"2331","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"4273","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9393","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"8252","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2654","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9248","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"1821","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4930","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1048","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"QA & Testing: Basic Details"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Structured testing is used to deliver our Regression Testing and End-User Acceptance/Beta Testing solutions.

Unstructured testing is used to deliver our Compatibility Testing, Exploratory Testing, Accessibility Testing, Localization/Language Testing, Functional/Feature Testing, and User Sentiment Analysis solutions. Unstructured testing does not use pre-defined test scripts -- this is true “in-the-wild” testing that can provide many forms of feedback on your application.

Regression Automation test suites can be created by Topcoder using tools like Selenium.

Automation Test Suites can be created by Topcoder using tools like Selenium, starting at up to 50 test cases.

Performance Testing by Topcoder will allow you to test several key functions of your application at scale with hundreds of virtual users. Reporting will be provided with specific recommendations to address any performance issues.

Mobility Testing can target up to 5 devices using our community of QA experts.

"},"fieldName":"details.appDefinition.qaType","icon":"question","options":[{"queryParamSelectCondition":"qaType == 'regression'","description":"Validate business-critical workflows in a structured manner","label":"Regression Testing","value":"regression-testing"},{"queryParamSelectCondition":"qaType == 'end-user-acceptance-testing'","summaryLabel":"Acceptance Testing","description":"Expand risk coverage and generate end-user feedback early in the life cycle","label":"End-User Acceptance Testing/Beta Testing ","value":"end-user-acceptance-testing"},{"queryParamSelectCondition":"qaType == 'compatibility-testing'","description":"Cross-browser, device testing including network, geographical coverage to assure app launch success","label":"Compatibility Testing","value":"compatibility-testing"},{"queryParamSelectCondition":"qaType == 'exploratory-testing'","description":"Validate functionality and usability of web and mobile apps in-the-wild with real-life users","label":"Exploratory Testing","value":"exploratory-testing"},{"queryParamSelectCondition":"qaType == 'accessibility-compliance'","description":"WCAG 2.1 standards-based usability testing and verification to confirm and guide to compliance","label":"Accessibility Testing","value":"accessibility-testing"},{"queryParamSelectCondition":"qaType == 'localization-testing'","description":"Validate the product (UI, Content) built for a particular culture or locale settings","label":"Localization/Language Testing","value":"localization-testing"},{"queryParamSelectCondition":"qaType == 'functional-feature-testing'","description":"Testing features in an agile environment to speed-up design and execution activities","label":"Functional/Feature Testing","value":"functional-testing"},{"queryParamSelectCondition":"qaType == 'sentiment-analysis'","description":"Compare applications with competitor products in the market to derive improvement actions","label":"User Sentiment Analysis","value":"sentiment-analysis"},{"queryParamSelectCondition":"qaType == 'regression-automation'","description":"Build reusable test scripts and frameworks using open source tools to accelerate app delivery & improve ROI","label":"Regression Automation","value":"regression-automation"},{"queryParamSelectCondition":"qaType == 'performance-improvement'","description":"Test responsiveness and stability of web and mobile applications under specific workloads","label":"Performance Testing","value":"performance-testing"},{"queryParamSelectCondition":"qaType == 'mobile-app-certification'","description":"Execute functional & non-functional tests including device compatibility certification & competitive analysis","label":"Mobile App Certification","value":"mobile-app-certifcation"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","summaryTitle":"QA Service","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","description":"","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","options":[{"description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"condition":"details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis'","fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 10 screens?","type":"radio-group","validationError":"Please, ley us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-automation'","fieldName":"details.appDefinition.needAdditionalRegressionTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 50 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 50 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalRegressionTests == 'yes'","fieldName":"details.appDefinition.regressionAutomationTestCount","icon":"question","options":[{"label":"50-100","value":"50-100"},{"label":"100-150","value":"100-150"},{"label":"150-200","value":"150-200"},{"label":"200-250","value":"200-250"},{"label":"250-300","value":"250-300"},{"label":"300+","value":"300+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"condition":"details.appDefinition.qaType == 'performance-testing'","fieldName":"details.appDefinition.concurrentUsers","icon":"question","options":[{"label":"Up to 500","value":"upto-500"},{"label":"500-1000","value":"500-1000"},{"label":"1000-5000","value":"1000-5000"},{"label":"5000+","value":"above-5000"}],"description":"","theme":"light","validations":"isRequired","title":"What is the desired system load of concurrent users?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"condition":"details.appDefinition.qaType == 'performance-testing'","fieldName":"details.appDefinition.processTransactionCount","icon":"question","options":[{"label":"Up to 5","value":"upto-5"},{"label":"5-10","value":"5-10"},{"label":"10-25","value":"10-25"},{"label":"25+","value":"above-25"}],"description":"","theme":"light","validations":"isRequired","title":"Approximately how many business processes/transactions are included in this performance testing?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"description","icon":"question","description":"","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description"},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Quality Assurance","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-10-03T04:52:03.000Z","updatedAt":"2020-04-21T15:12:36.689Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":16,"name":"Performance Testing","key":"performance_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-website-performance","question":"What kind of quality assurance (QA) do you need?","info":"Webpage rendering effiency, Load, Stress and Endurance Test","aliases":["performance-testing","performance_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"In 160 or more characters tell us what is the app, main functions, problem area, etc..","id":"projectInfo","validations":"isRequired,minLength:160","title":"Please provide brief description of the system and/or application you would like to execute Performance Testing on.","type":"textbox"},{"fieldName":"details.loadDetails.concurrentUsersCount","icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","title":"What is the desired load on the system in terms of concurrent users for this test??","type":"slide-radiogroup","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","title":"Approximately how many business processes/transactions will be included in your Performance Test?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","title":"How many hours do you expect the Performance Test to be executed for?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements, architecture details, tools, performance baseline, etc. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project. If you have any supporting documents, please add the links in the “Notes” section. You can upload any additional files (specifications, diagrams, mock interfaces, etc.) once your project is created.","id":"appDefinition","title":"Performance Testing","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-06T08:22:15.000Z","updatedAt":"2020-04-21T15:12:36.852Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":240,"name":"Localization/Language Testing","key":"qa_language_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"localization-testing","question":"What kind of quality assurance (QA) do you need?","info":"Validate the product (UI, Content) built for a particular culture or locale settings.","aliases":["qa_language_testing","qa-language-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Localization/Language Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will localization/language testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Localization/Language Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:18:48.446Z","updatedAt":"2020-04-21T15:12:36.852Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":225,"name":"Engage Talent","key":"talent_as_a_service-v1.1","category":"talent-as-a-service","subCategory":null,"metadata":{"detailLink":"https://www.topcoder.com/case-studies/building-apps-on-ethereum/","deliverables":[{"infoHTML":"

Expected Deliverables

Talent as a Service (TaaS) from Topcoder gives our enterprise customers access to the best freelancers the gig economy has to offer — without risk, expensive full time hires, or wasting time deciding on designers and developers based on stars or reviews. Your Topcoder Copilot guides the process and manages logistics from start to finish.
"}]},"icon":"engage-talent","question":"What type of talent you are looking for?","info":"You need top talent to deliver on your most pressing ideas, to help you differentiate, and to get things done fast.","aliases":["talent-as-a-service","talent_as_a_service"],"scope":{"addonPriceConfig":{},"basePriceEstimate":0,"priceConfig":{"HAS_NEW_PROJECT_DELIVERABLE":[["NEW_PROJECT"]]},"hideEstimation":true,"hidePrice":true,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"You need top talent to deliver on your most pressing ideas, to help you differentiate, and to get things done fast. Talent as a Service (TaaS) from Topcoder gives our customers access to the best freelancers the gig economy has to offer — without risk, expensive full time hires or wasting time deciding on designers and developers based on stars or reviews.","theme":"light","type":"message"},{"questions":[{"fieldName":"description","theme":"light","type":"textbox","title":"Tell us about your project"},{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.taasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"New Project","description":"","label":"New project or idea exploration","value":"newProject"},{"summaryLabel":"Existing Project","description":"","label":"Help on an existing project","value":"existingProject"},{"summaryLabel":"Ongoing Assistance","description":"","label":"Ongoing assistance on several projects","value":"ongoingAssistanceOnProject"},{"description":"","label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"What type of project do you need help with?","type":"checkbox-group","summaryTitle":"Talent Area","validationError":"Please, choose what do you need.","required":true},{"condition":"HAS_OTHER_DELIVERABLE","fieldName":"details.taasDefinition.otherBrief","icon":"question","description":"","title":"Please describe the type of talent you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.help.brief","icon":"question","description":"","title":"Help us understand the types of help you're looking for.","type":"textbox","summaryTitle":"Help Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"skills":{"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"fieldName":"details.taasDefinition.team.skills","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What skills are important for your team to have?","type":"skills","summaryTitle":"Team Skills","validationError":"Please, choose at least one skill.","required":true},{"condition":"HAS_OTHER_SKILLS","fieldName":"details.taasDefinition.otherSkills","icon":"question","description":"","title":"Please describe the other skills you require.","type":"textbox","summaryTitle":"Others skills"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-skills","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.tools","icon":"question","options":[{"label":"Github","value":"github"},{"label":"GitLab","value":"gitlab"},{"label":"Jira","value":"jira"},{"label":"Trello","value":"trello"},{"label":"Basecamp","value":"basecamp"},{"label":"I'm not using anything, but would love a recommendation.","value":"recommendation"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Are you using a specific tool to manage work?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one tool.","required":true},{"condition":"HAS_OTHER_TOOLS","fieldName":"details.taasDefinition.otherToolsBrief","icon":"question","description":"","title":"Please describe the type of other tools you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-tools","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.resourceHours","icon":"question","description":"","validationErrors":{"isPositiveNumber":"Please, enter a positive number."},"validations":"isPositiveNumber","title":"How many full-time (40hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Full-Time"},{"fieldName":"details.taasDefinition.partTimeresourceHours","icon":"question","description":"","validationErrors":{"isNonNegativeNumber":"Please, enter a positive number or zero."},"validations":"isNonNegativeNumber","title":"How many part-time (20hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Part-Time"},{"fieldName":"details.taasDefinition.resourceDuration","icon":"question","options":[{"label":"Less than 1 month","value":"rangeOne"},{"label":"1-3 months","value":"rangeTwo"},{"label":"3-6 months","value":"rangeThree"},{"label":"More than 6 months","value":"rangeFour"}],"description":"","theme":"light","title":"How long would you like these resources for?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."},{"fieldName":"details.taasDefinition.kickOffTime","icon":"question","options":[{"label":"I’m ready now","value":"rangeOne"},{"label":"1-2 weeks","value":"rangeTwo"},{"label":"3-4 weeks","value":"rangeThree"},{"label":"I’m not sure yet","value":"rangeFour"}],"description":"","theme":"light","title":"When do you need to start?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"talentDefinition","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.otherRequirements","icon":"question","options":[{"label":"Specific background checks","value":"specificBackgroundChecks"},{"label":"Special clearance","value":"specialClearance"},{"label":"Access to restricted development environments","value":"restrictedDevelopment"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Do you require any of the following?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one requirement.","required":true},{"condition":"HAS_OTHER_REQUIREMENT","fieldName":"details.taasDefinition.otherRequirementBrief","icon":"question","description":"","title":"Please describe any other requirement.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-otherRequirements","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Your Talent Requirements","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"newProject","deliverableKey":"newProject","title":"New Project","enableCondition":"HAS_NEW_PROJECT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null,"buildingBlocks":{"NEW_PROJECT":{"maxTime":28,"metadata":{"deliverable":"newProject"},"price":"7363","minTime":28,"conditions":"HAS_NEW_PROJECT_DELIVERABLE"}},"preparedConditions":{"HAS_DATA_SCIENCE_DELIVERABLE":"(details.taasDefinition.deliverables contains 'data-science')","HAS_DESIGN_DELIVERABLE":"(details.taasDefinition.deliverables contains 'design')","HAS_DEV_DELIVERABLE":"(details.taasDefinition.deliverables contains 'dev')","HAS_OTHER_SKILLS":"(details.taasDefinition.team.skills contains 'other')","HAS_NEW_PROJECT_DELIVERABLE":"(details.taasDefinition.deliverables contains 'newProject')","HAS_OTHER_DELIVERABLE":"(details.taasDefinition.deliverables contains 'other')","HAS_OTHER_REQUIREMENT":"(details.taasDefinition.otherRequirements contains 'other')","TRUTHY":"( 1 == 1)","HAS_QA_DELIVERABLE":"(details.taasDefinition.deliverables contains 'qa')","HAS_OTHER_TOOLS":"(details.taasDefinition.tools contains 'other')","FALSY":"( 1 == 2)"},"showPrice":false,"priceConfig-old":null,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-11-02T07:46:06.000Z","updatedAt":"2020-04-21T15:12:36.852Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":211,"name":"Data Science Ideation","key":"ds_ideation","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

  • Written briefs that describe findings and approach
  • Ideations can also include demonstrative pseudocode or brief proofs of concepts
"}]},"icon":"data-science-ideation","question":"DS Ideationa","info":"Wondering what you can do with your data? Get tailored recommendations to see how your data science problem can be solved, by some of the brightest minds on the planet.","aliases":["ds_ideation"," ds-ideation"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"2529","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"2494","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"6035","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"8195","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"6479","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"2516","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Ideation"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsIdeation.problemStatement","icon":"question","description":"","title":"Please state the problem you would like to solve.","type":"textbox","summaryTitle":"Problem Statement","required":true,"validationError":"Please, provide problem statement/concept for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"See White Paper Example","title":"See White Paper Example","content":"

Overview: describe your approach in “laymen’s terms”

Methods: describe what you did to come up with this approach, eg literature search, experimental testing, etc

Materials: did your approach use a specific technology? Any libraries? List all tools and libraries you used

Discussion: Explain what you attempted, considered or reviewed that worked, and especially those that didn’t work or that you rejected. For any that didn’t work, or were rejected, briefly include your explanation for the reasons (e.g. such-and-such needs more data than we have). If you are pointing to somebody else’s work (eg you’re citing a well known implementation or literature), describe in detail how that work relates to this work, and what would have to be modified

Data: What other data should one consider? Is it in the public domain? Is it derived? Is it necessary in order to achieve the aims? Also, what about the data described/provided - is it enough?

Assumptions and Risks: what are the main risks of this approach, and what are the assumptions you/the model is/are making? What are the pitfalls of the data set and approach?

Results: Did you implement your approach? How’d it perform? If you’re not providing an implementation, use this section to explain the EXPECTED results.

Other: Discuss anyother issues or attributes that don’t fit neatly above that you’d also like to include

"},"fieldName":"details.dsIdeation.output","icon":"question","options":[{"description":"Submission options should provide a point of view, summarized and cited references, and analysis. Click the tooltip to see an example submission template.","label":"White papers, only.","value":"whitePapers"},{"description":"POCs are meant to be illustrative, and are not robust solutions.","label":"White papers with light,functioning proof of concepts.","value":"whitePapersAndPoc"}],"description":"","theme":"light","title":"What type of output are you seeking?","type":"radio-group","summaryTitle":"Project output","required":true},{"condition":"(details.dsIdeation.output == 'whitePapersAndPoc')","fieldName":"details.dsIdeation.preferredTech","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have preferred technologies for your POC?","type":"radio-group","summaryTitle":"Do you have Preferred Technology"},{"condition":"( details.dsIdeation.preferredTech == 'yes')","fieldName":"details.dsIdeation.preferredTechnologies","icon":"question","options":[{"label":"Python","value":"python"},{"label":"R and derivatives","value":"rDerivatives"},{"label":"Jupyter Notebook","value":"jupyter"},{"label":"Java","value":"java"},{"label":"C++","value":"cpp"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"Indicate your preferred technologies","type":"checkbox-group","summaryTitle":"Preferred Technology","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the preffered technologies","required":true},{"condition":"details.dsIdeation.preferredTechnologies contains 'other'","fieldName":"details.dsIdeation.techPlatforms","icon":"question","description":"","title":"Describe which technologies or platforms you’d like to use","type":"textbox","summaryTitle":"Other Technologies","validationError":"Please, provide technologies or platforms you’d like to use"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"preferredTechnology","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.backgroundDesc","icon":"question","description":"","title":"Provide a descriptive background of the problem.","type":"textbox","summaryTitle":"Problem Background","required":true,"validationError":"Please, provide a descriptive background of the problem"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"problemBackgroundDesc","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.academicPapers","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Are there academic papers or other sources that should be considered as inputs for your project?","type":"radio-group","summaryTitle":"Academic Papers"},{"condition":"(details.dsIdeation.academicPapers == 'yes')","fieldName":"details.dsIdeation.urls","icon":"question","description":"","theme":"light","title":"Please list URLs to academic papers or other sources. ","type":"textbox","summaryTitle":"Academic URLs","required":true,"validationError":"Please, list URLs to academic papers or other sources."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"academicPapers","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.solutionOptimizationApproach","icon":"question","options":[{"description":"","label":"Sourcing new ideas ","value":"newIdeas"},{"description":"","label":"Filtering out options so I can focus on the most promising way forward","value":"filteringOut"}],"description":"","theme":"light","title":"What is more important, sourcing many new ideas or filtering out options?","type":"radio-group","summaryTitle":"New Ideas V/S Filtering Options"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"solutionOptimizationApproach","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.dataAvailable","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have data that you can provide?","type":"radio-group","summaryTitle":"Data Available"},{"condition":"(details.dsIdeation.dataAvailable == 'yes')","fieldName":"details.dsIdeation.dataFormat","icon":"question","description":"","title":"Describe the data’s format, size, and the steps you’ll need to take to share it.","type":"textbox","summaryTitle":"Data format & other details"},{"condition":"(details.dsIdeation.dataAvailable == 'yes')","fieldName":"details.dsIdeation.pIIData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data contain PII?","type":"radio-group","summaryTitle":"PII Data"},{"condition":"(details.dsIdeation.dataAvailable == 'yes')","fieldName":"details.dsIdeation.dataModifications","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data need to be further obfuscated or privatized","type":"radio-group","summaryTitle":"Data Obfuscated/Privatized"},{"condition":"(details.dsIdeation.dataModifications == 'yes')","fieldName":"details.dsIdeation.dataModificationsDesc","icon":"question","description":"","theme":"light","title":"Briefly describe the additional obfuscation/privatization required.","type":"textbox","summaryTitle":"Obfuscation/Privatization Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria you would like to use for deciding winning options."},{"fieldName":"details.dsIdeation.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Ideation","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-06-24T10:25:40.000Z","updatedAt":"2020-04-21T15:12:36.691Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":116,"name":"Chatbot","key":"kubik_chatbot","category":"chatbot","subCategory":null,"metadata":{},"icon":"product-chatbot-chatbot","question":"What do you need to develop?","info":"Build, train and test a custom conversation for your chat bot","aliases":["kubik_chatbot","kubik-chatbot"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.capabilities","icon":"question","options":[{"label":"Order management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","title":"What capabilities does the chatbot need to support?","type":"checkbox-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.integrationSystems","icon":"question","description":"","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below.","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.existingAgentScripts","icon":"question","description":"","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later).","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.transferToHumanAgents","icon":"question","description":"","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.).","type":"textbox","required":true,"validationError":"Please complete this section"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Chatbot","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-01T08:24:04.000Z","updatedAt":"2020-04-21T15:12:36.783Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":226,"name":"TaaS (Specialists)","key":"talent-as-a-service-specialists","category":"unscoped-solutions","subCategory":null,"metadata":{},"icon":"talent-as-a-service","question":"What type of talent you are looking for?","info":"Talent as a Service (Specialists)","aliases":["talent-as-a-service-specialists"],"scope":{"addonPriceConfig":{},"basePriceEstimate":0,"priceConfig":{"HAS_NEW_PROJECT_DELIVERABLE":[["NEW_PROJECT"]]},"hideEstimation":true,"hidePrice":true,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"You need top talent to deliver on your most pressing ideas, to help you differentiate, and to get things done fast. Talent as a Service (TaaS) from Topcoder gives our customers access to the best freelancers the gig economy has to offer — without risk, expensive full time hires or wasting time deciding on designers and developers based on stars or reviews.","theme":"light","type":"message"},{"questions":[{"fieldName":"description","theme":"light","type":"textbox","title":"Tell us about your project"},{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.taasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"New Project","description":"","label":"New project or idea exploration","value":"newProject"},{"summaryLabel":"Existing Project","description":"","label":"Help on an existing project","value":"existingProject"},{"summaryLabel":"Ongoing Assistance","description":"","label":"Ongoing assistance on several projects","value":"ongoingAssistanceOnProject"},{"description":"","label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"What type of project do you need help with?","type":"checkbox-group","summaryTitle":"Talent Area","validationError":"Please, choose what do you need.","required":true},{"condition":"HAS_OTHER_DELIVERABLE","fieldName":"details.taasDefinition.otherBrief","icon":"question","description":"","title":"Please describe the type of talent you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.specialists","icon":"question","options":[{"role":"desiger","skillsCategory":"design","roleTitle":"Designer","icon":"product-cat-design"},{"role":"frontend-dev","roleTitle":"Front End Developer","icon":"product-dev-front-end-dev"},{"role":"backend-dev","skillsCategory":"develop","roleTitle":"Back End Developer","icon":"product-dev-prototype"},{"role":"fullstack-dev","skillsCategory":"develop","roleTitle":"Back End Developer","icon":"product-cat-development"},{"role":"qa","skillsCategory":"qa","roleTitle":"QA Tester","icon":"product-qa-crowd-testing"},{"role":"data-scientist","skillsCategory":"data_science","roleTitle":"Data Scientist","icon":"product-cat-analytics"}],"validations":"isRequired","title":"Tell us about your talent needs","type":"talent-picker","summaryTitle":"Talents","introduction":"If you have multiple open positions with different skills engagement duration requirements, click the + sign to the right and enter each role individually","validationError":"Please, choose at least one talent role.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.specialistsOptional","icon":"question","options":[{"role":"desiger","skillsCategory":"design","roleTitle":"Designer","icon":"product-cat-design"},{"role":"frontend-dev","roleTitle":"Front End Developer","icon":"product-dev-front-end-dev"},{"role":"backend-dev","skillsCategory":"develop","roleTitle":"Back End Developer","icon":"product-dev-prototype"},{"role":"fullstack-dev","skillsCategory":"develop","roleTitle":"Back End Developer","icon":"product-cat-development"},{"role":"qa","skillsCategory":"qa","roleTitle":"QA Tester","icon":"product-qa-crowd-testing"},{"role":"data-scientist","skillsCategory":"data_science","roleTitle":"Data Scientist","icon":"product-cat-analytics"}],"title":"Tell us about your talent needs (optional)","type":"talent-picker","summaryTitle":"Talents (optional)","introduction":"If you have multiple open positions with different skills engagement duration requirements, click the + sign to the right and enter each role individually"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.help.brief","icon":"question","description":"","title":"Help us understand the types of help you're looking for.","type":"textbox","summaryTitle":"Help Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"skills":{"categoriesMapping":{"existingProject":"develop","other":"data_science","newProject":"design","ongoingAssistanceOnProject":"qa"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"fieldName":"details.taasDefinition.team.skills","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What skills are important for your team to have?","type":"skills","summaryTitle":"Team Skills","validationError":"Please, choose at least one skill.","required":true},{"condition":"HAS_OTHER_SKILLS","fieldName":"details.taasDefinition.otherSkills","icon":"question","description":"","title":"Please describe the other skills you require.","type":"textbox","summaryTitle":"Others skills"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-skills","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.tools","icon":"question","options":[{"label":"Github","value":"github"},{"label":"GitLab","value":"gitlab"},{"label":"Jira","value":"jira"},{"label":"Trello","value":"trello"},{"label":"Basecamp","value":"basecamp"},{"label":"I'm not using anything, but would love a recommendation.","value":"recommendation"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Are you using a specific tool to manage work?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one tool.","required":true},{"condition":"HAS_OTHER_TOOLS","fieldName":"details.taasDefinition.otherToolsBrief","icon":"question","description":"","title":"Please describe the type of other tools you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-tools","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.resourceHours","icon":"question","description":"","validationErrors":{"isPositiveNumber":"Please, enter a positive number."},"validations":"isPositiveNumber","title":"How many full-time (40hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Full-Time"},{"fieldName":"details.taasDefinition.partTimeresourceHours","icon":"question","description":"","validationErrors":{"isNonNegativeNumber":"Please, enter a positive number or zero."},"validations":"isNonNegativeNumber","title":"How many part-time (20hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Part-Time"},{"fieldName":"details.taasDefinition.resourceDuration","icon":"question","options":[{"label":"Less than 1 month","value":"rangeOne"},{"label":"1-3 months","value":"rangeTwo"},{"label":"3-6 months","value":"rangeThree"},{"label":"More than 6 months","value":"rangeFour"}],"description":"","theme":"light","title":"How long would you like these resources for?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."},{"fieldName":"details.taasDefinition.kickOffTime","icon":"question","options":[{"label":"I’m ready now","value":"rangeOne"},{"label":"1-2 weeks","value":"rangeTwo"},{"label":"3-4 weeks","value":"rangeThree"},{"label":"I’m not sure yet","value":"rangeFour"}],"description":"","theme":"light","title":"When do you need to start?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"talentDefinition","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.otherRequirements","icon":"question","options":[{"label":"Specific background checks","value":"specificBackgroundChecks"},{"label":"Special clearance","value":"specialClearance"},{"label":"Access to restricted development environments","value":"restrictedDevelopment"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Do you require any of the following?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one requirement.","required":true},{"condition":"HAS_OTHER_REQUIREMENT","fieldName":"details.taasDefinition.otherRequirementBrief","icon":"question","description":"","title":"Please describe any other requirement.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-otherRequirements","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Your Talent Requirements","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"newProject","deliverableKey":"newProject","title":"New Project","enableCondition":"HAS_NEW_PROJECT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null,"buildingBlocks":{"NEW_PROJECT":{"maxTime":28,"metadata":{"deliverable":"newProject"},"price":"1960","minTime":28,"conditions":"HAS_NEW_PROJECT_DELIVERABLE"}},"preparedConditions":{"HAS_DATA_SCIENCE_DELIVERABLE":"(details.taasDefinition.deliverables contains 'data-science')","HAS_DESIGN_DELIVERABLE":"(details.taasDefinition.deliverables contains 'design')","HAS_DEV_DELIVERABLE":"(details.taasDefinition.deliverables contains 'dev')","HAS_OTHER_SKILLS":"(details.taasDefinition.team.skills contains 'other')","HAS_NEW_PROJECT_DELIVERABLE":"(details.taasDefinition.deliverables contains 'newProject')","HAS_OTHER_DELIVERABLE":"(details.taasDefinition.deliverables contains 'other')","HAS_OTHER_REQUIREMENT":"(details.taasDefinition.otherRequirements contains 'other')","TRUTHY":"( 1 == 1)","HAS_QA_DELIVERABLE":"(details.taasDefinition.deliverables contains 'qa')","HAS_OTHER_TOOLS":"(details.taasDefinition.tools contains 'other')","FALSY":"( 1 == 2)"},"showPrice":false,"priceConfig-old":null,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-11-08T08:05:31.000Z","updatedAt":"2020-04-21T15:12:36.783Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":51,"name":"Other Design","key":"generic_design","category":"website","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-other.svg","question":"Other Design","info":"Get help with other types of design","aliases":["generic-design","generic_design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","icon":"question","description":"Brief Description","id":"projectInfo","title":"Description","type":"textbox","required":true,"validationError":"Please provide a description"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Other Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-12-10T11:36:24.000Z","updatedAt":"2020-04-21T15:12:36.784Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":227,"name":"Development Integration","key":"cs_generic_dev-V","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"Development Integration","info":"Get help with any part of your app or software","aliases":["cs-generic-development-1"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","FALSY":"1 == 2","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"hidePrice":true,"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"Tell us how Topcoder can help. Please provide as much detail as possible, so that we can accurately scope your request. As an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so after submitting your project request.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Let’s set up your project"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.purpose","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What do you need help with?","type":"textbox","summaryTitle":"Purpose","validationError":"Please, define the help you need."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.notes","icon":"question","description":"Include any additional information.","title":"Notes + Supporting Link Sharing","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Let’s set up your project","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2},{"sectionIndex":4}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-12-20T04:33:00.656Z","updatedAt":"2020-04-21T15:12:36.785Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":244,"name":"Acceptance/Beta Testing","key":"qa_acceptance_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Execution of test cases
  • \n
  • Validated defect log in Github or Gitlab
  • \n
  • Screenshots or videos of logged defects
  • \n
\n
"}]},"icon":"beta-testing","question":"What kind of quality assurance (QA) do you need?","info":"Expand risk coverage and generate end-user feedback early in the life cycle.","aliases":["qa_acceptance_testing","qa-acceptance-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Acceptance/Beta Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need as a part of your end-user acceptance/beta testing?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true},{"fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Acceptance/Beta Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:35:13.680Z","updatedAt":"2020-04-21T15:12:36.789Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":38,"name":"Real World Testing","key":"real_world_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["real-world-testing","real_world_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"fieldName":"details.appDefinition.expectedHours","icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Do you have test cases you would like executed? These are essential when running structured testing and optional for unstructured testing. If you are planning a structured test cycle and do not have test cases do not worry, we can help!","title":"Do you have test cases written?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.userInfo","icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help us find the best testers for your application.","title":"Please tell us about your users.","type":"textbox"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Real World Testingx","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-07T10:12:50.000Z","updatedAt":"2020-04-21T15:12:36.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":13,"name":"Mobility Testing","key":"mobility_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-mobility-testing","question":"What kind of quality assurance (QA) do you need?","info":"App Certification, Lab on Hire, User Sentiment Analysis","aliases":["mobility-testing","mobility_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.mobilityTestingType","icon":"question","options":[{"title":"Select","value":""},{"title":"Banking or Financial Services","value":"finserv"},{"title":"eCommerce","value":"ecommerce"},{"title":"Media / Entertainment","value":"entertainment"},{"title":"Gaming","value":"gaming"},{"title":"Health and Fitness","value":"health"},{"title":"Manufacturing","value":"manufacturing"},{"title":"Retail","value":"retail"},{"title":"Travel / Transportation","value":"travel"},{"title":"Other","value":"other"}],"description":"Please let us know the type of application to test. If you are unsure, please select \"Other\"","title":"What kind of application would you like to test?","type":"select-dropdown","required":true,"validationError":"Please let us know what kind of application you would like to test."},{"fieldName":"details.appDefinition.testCases","icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Please let us know if you have any test cases written. If not, they can be created as part of your test cycle.","title":"Do you have test cases written?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.userInfo","icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help us find the best testers for your application.","title":"Please tell us about your users.","type":"textbox"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Mobility Testing","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-06T07:31:13.000Z","updatedAt":"2020-04-21T15:12:36.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":204,"name":"Data Visualization","key":"data_visualization","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

  • Existing report improved and ported to new data visualization platform
  • OR a new report or rich data visualization built to specifications
"}]},"icon":"data-visualization","question":"whata","info":"Pull the most important highlights from your data and visualize them to give decision-makers the tools they need to work smarter.","aliases":["data_visualization","data-visualization"],"scope":{"buildingBlocks":{"FREE_SIZE_DATA_VIZ_DESIGN":{"maxTime":10,"metadata":{"deliverable":"data-viz-design"},"price":"7375","minTime":10,"conditions":"( TRUTHY )"},"FREE_SIZE_DATA_VIZ_DEVELOP":{"maxTime":10,"metadata":{"deliverable":"data-viz-develop"},"price":"1365","minTime":10,"conditions":"( TRUTHY )"}},"preparedConditions":{"NEED_NEW_DESIGNS":"(details.dataVizDefinition.designWork == 'new-designs')","ASK_LICENSED_PLATFORM_REQUIRED":"( details.dataVizDefinition.deliverables == 'port-improve-existing' && !(details.dataVizDefinition.existing.platformsRequired hasLength 0) && !(details.dataVizDefinition.existing.platformsRequired hasLength 1 && (details.dataVizDefinition.existing.platformsRequired contains 'other' || details.dataVizDefinition.existing.platformsRequired contains 'existing-platform')))","ASK_LICENSED_PLATFORM_REQUIRED_NEW":"( details.dataVizDefinition.deliverables == 'create-new' && !(details.dataVizDefinition.new.platformsRequired hasLength 0) && !(details.dataVizDefinition.new.platformsRequired hasLength 1 && details.dataVizDefinition.new.platformsRequired contains 'other'))","ONE_DELIVERABLE":"( 1 == 1)","HAS_EXISTING_LICENSED_PLATFORM":"( details.dataVizDefinition.deliverables == 'port-improve-existing' && !(details.dataVizDefinition.existing.platforms hasLength 0) && !(details.dataVizDefinition.existing.platforms hasLength 1 && details.dataVizDefinition.existing.platforms contains 'other'))","CA_NEEDED":"(details.apiDefinition.caNeeded == 'yes')","HAS_PORT_EXISTING_DELIVERABLE":"(details.dataVizDefinition.deliverables == 'port-improve-existing')","HAS_NEW_REPORTS_DELIVERABLE":"(details.dataVizDefinition.deliverables == 'create-new')","TRUTHY":"( 1 == 1)","CA_NOT_NEEDED":"(details.apiDefinition.caNeeded != 'yes')","HAS_EXISTING_DESIGNS":"(details.dataVizDefinition.designWork == 'existing-designs')","HAS_SAMPLE_ADDON":"(details.apiDefinition.addons.dataViz contains '{\"productKey\":\"sample-addon\"}')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"( HAS_NEW_REPORTS_DELIVERABLE || NEED_NEW_DESIGNS )":[["FREE_SIZE_DATA_VIZ_DESIGN","FREE_SIZE_DATA_VIZ_DEVELOP"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description"},"theme":"light","validations":"isRequired","type":"textbox","title":"Describe the objectives of your Data Visualization project in 2-3 sentences.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Data Visualization"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dataVizDefinition.deliverables","icon":"question","options":[{"description":"","label":"Porting and improving an existing report","value":"port-improve-existing"},{"description":"","label":"Design and develop a new report or rich data visualization","value":"create-new"}],"description":"","theme":"light","title":"What do you need help with?","type":"radio-group","summaryTitle":"Deliverables","validationError":"Please, let us know where do you need us to help with?","required":true},{"condition":"( details.dataVizDefinition.deliverables == 'port-improve-existing' )","fieldName":"details.dataVizDefinition.designWork","icon":"question","options":[{"description":"","label":"Use existing designs","value":"existing-designs"},{"description":"","label":"Create new designs","value":"new-designs"}],"description":"","theme":"light","title":"Are we using existing designs or creating new ones?","type":"radio-group","summaryTitle":"Design Work","validationError":"Please, let us know if we are using existing designs or creating new ones?","required":true},{"fieldName":"details.dataVizDefinition.existing.platforms","icon":"question","description":"","title":"What platform were the existing reports using?","type":"checkbox-group","summaryTitle":"Existing Platforms","validationError":"Please, select the data visualization platform would you like to leverage?","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

You can leverage a common data visualization platform, such as Tableau, or Topcoder can build you a custom solution.

"},"condition":"( details.dataVizDefinition.deliverables == 'port-improve-existing' )","options":[{"label":"Tableau","value":"tableau"},{"label":"Qlik & Product Family","value":"qlik-product-family"},{"label":"Power BI","value":"power-bi"},{"label":"TIBCO/Spotfire","value":"tibco-spotfire"},{"label":"Looker","value":"looker"},{"label":"Topcoder custom solution","value":"topcoder-custom-solution"},{"label":"Other","value":"other"}],"theme":"light","introduction":"List any licensed platforms/features you use today for data visualization."},{"condition":"(details.dataVizDefinition.existing.platforms contains 'other')","fieldName":"details.dataVizDefinition.existing.otherPlatforms","icon":"question","description":"","theme":"light","title":"Please describe other existing platforms","type":"textbox","summaryTitle":"Other Existing Platforms"},{"condition":"( HAS_EXISTING_LICENSED_PLATFORM )","fieldName":"details.dataVizDefinition.existing.licensedFeatures","icon":"question","description":"","theme":"light","title":"Describe any licensed features you have with the selected platforms.","type":"textbox","summaryTitle":"Licensed Features"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

You can leverage a common data visualization platform, such as Tableau, or Topcoder can build you a custom solution.

"},"condition":"( details.dataVizDefinition.deliverables == 'port-improve-existing' )","fieldName":"details.dataVizDefinition.existing.platformsRequired","icon":"question","options":[{"label":"Same platform(s) currently being used.","value":"existing-platform"},{"label":"Tableau","value":"tableau"},{"label":"Qlik & Product Family","value":"qlik-product-family"},{"label":"Power BI","value":"power-bi"},{"label":"TIBCO/Spotfire","value":"tibco-spotfire"},{"label":"Looker","value":"looker"},{"label":"Topcoder custom solution","value":"topcoder-custom-solution"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What platform would you like us to use moving forward?","type":"checkbox-group","summaryTitle":"Visualization Platforms","validationError":"Please, select the data visualization platform would you like us to use moving forward?","required":true},{"condition":"(details.dataVizDefinition.existing.platformsRequired contains 'other')","fieldName":"details.dataVizDefinition.existing.otherPlatformsRequired","icon":"question","description":"","theme":"light","title":"What other platforms you like us to use moving forward?","type":"textbox","summaryTitle":"Other Platforms"},{"condition":"( ASK_LICENSED_PLATFORM_REQUIRED )","fieldName":"details.dataVizDefinition.existing.licensedFeaturesRequired","icon":"question","description":"","theme":"light","title":"Describe any licensed features you have with the selected platforms.","type":"textbox","summaryTitle":"Licensed Features"},{"fieldName":"details.dataVizDefinition.new.platformsRequired","icon":"question","description":"","title":"What data visualization platform would you like to leverage?","type":"checkbox-group","summaryTitle":"Visualization Platforms","validationError":"Please, select the data visualization platform would you like to leverage?","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

You can leverage a common data visualization platform, such as Tableau, or Topcoder can build you a custom solution.

"},"condition":"( details.dataVizDefinition.deliverables == 'create-new' )","options":[{"label":"Tableau","value":"tableau"},{"label":"Qlik & Product Family","value":"qlik-product-family"},{"label":"Power BI","value":"power-bi"},{"label":"TIBCO/Spotfire","value":"tibco-spotfire"},{"label":"Looker","value":"looker"},{"label":"Topcoder custom solution","value":"topcoder-custom-solution"},{"label":"Other","value":"other"}],"theme":"light","introduction":"Describe your preference and list any licensed platforms/features you use today for data visualization."},{"condition":"(details.dataVizDefinition.new.platformsRequired contains 'other')","fieldName":"details.dataVizDefinition.new.otherPlatformsRequired","icon":"question","description":"","theme":"light","title":"What other platforms you like to leverage?","type":"textbox","summaryTitle":"Other Platforms"},{"condition":"( ASK_LICENSED_PLATFORM_REQUIRED_NEW )","fieldName":"details.dataVizDefinition.new.licensedFeaturesRequired","icon":"question","description":"","theme":"light","title":"Describe any licensed features you have with the selected platforms.","type":"textbox","summaryTitle":"Licensed Features"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dataVizDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Mobile","value":"mobile"},{"label":"Tablet","value":"tablet"}],"description":"","theme":"light","title":"Where will your data be viewed?","type":"checkbox-group","summaryTitle":"Target Devices","validationError":"Please, select the target devices?","required":true},{"fieldName":"details.dataVizDefinition.tabsCount","icon":"question","description":"","theme":"light","title":"How many separate tabs do you expect your data visualization report to have?","type":"textinput","summaryTitle":"Tabs Count"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"requirements","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dataVizDefinition.dataDetails","icon":"question","description":"","theme":"light","validations":"isRequired","title":"Briefly describe the data that will be visualized.","type":"textbox","summaryTitle":"Data Description","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What does this mean?","title":"What does this mean?","content":"

Data is considered easily accessible when it can be shared as-is with our platform through database extracts or spreadsheets and is not constrained by obfuscation, licensing, or data sensitivity.

"},"fieldName":"details.dataVizDefinition.isDataAccessible","icon":"question","options":[{"description":"","label":"Yes, the data is easily accessible.","value":"yes"},{"description":"","label":"No, the data is not easily accessible.","value":"no"}],"description":"","theme":"light","title":"Is your data easily accessible?","type":"radio-group","summaryTitle":"Is Data Accessible"},{"help":{"linkTitle":"Why obfuscate data?","title":"Why obfuscate data?","content":"

Obfuscation protects unintentional data loss/sharing of sensitive data. Sensitive data includes, but is not limited too:

  • -confidential business information (e.g. financial, operational, trade secrets)
  • -classified information (subject to governmental security regulations)
  • -personal identifiable information (PII)

"},"fieldName":"details.dataVizDefinition.needObfuscation","icon":"question","options":[{"description":"","label":"No, my data is ready as-is.","value":"no"},{"description":"","label":"Yes, my data will need obfuscation.","value":"yes"}],"description":"","theme":"light","title":"Will Topcoder need to obfuscate your data?","type":"radio-group","summaryTitle":"Need Obfuscation"},{"help":{"linkTitle":"Why are you asking?","title":"Why are you asking?","content":"

Data that is available for everyday consumption has typically been refreshed and processed into the appropriate form on at least a daily basis. The importance of this availability will depend on your data visualization needs—whether your objectives lean more analytical vs operational.

"},"fieldName":"details.dataVizDefinition.isDataRefreshedDaily","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Is the data refreshed daily?","type":"radio-group","summaryTitle":"Data Access"},{"fieldName":"details.dataVizDefinition.sampleData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Will you provide sample/reference data?","type":"radio-group","summaryTitle":"Sample Data"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dataVizDefinition.userRoles","icon":"question","description":"","title":"Briefly describe the roles of the intended users and how they will leverage the data to make decisions.","type":"textbox","summaryTitle":"User Roles"},{"fieldName":"details.dataVizDefinition.intendedDataUsage","icon":"question","description":"","title":"How will the intended users need to manipulate the data to effectively analyze it?","type":"textbox","summaryTitle":"Intended Usage"},{"fieldName":"details.dataVizDefinition.currentDataUsage","icon":"question","description":"","title":"Briefly describe how the intended users access this data today.","type":"textbox","summaryTitle":"Data Usage","introduction":"What do users like and dislike about how they access the data today, and what would make the experience better?"},{"fieldName":"details.dataVizDefinition.performanceIndicators","icon":"question","description":"","title":"What are the key performance indicators that should be highlighted and why are they important to you?","type":"textbox","summaryTitle":"Performance Indicators"},{"help":{"linkTitle":"What are common success indicators?","title":"What are common success indicators?","content":"

In Topcoder’s history, data visualization project success has often been based off of the following attributes:

  • How well the UX is planned, captured and conveyed visually.
  • How well the dashboard shows the data and relationships.
  • Effective data coverage.

"},"fieldName":"details.dataVizDefinition.successIndicators","icon":"question","description":"","title":"What will qualify this data visualization project as a success for you?","type":"textbox","summaryTitle":"Success Indicators"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"usageDetails","type":"questions"},{"condition":"HAS_EXISTING_DESIGNS","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Topcoder will review your request and will respond with a custom quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Visualization","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"condition":"( HAS_NEW_REPORTS_DELIVERABLE || NEED_NEW_DESIGNS )","type":"estimation","title":"Your project timeline","deliverables":[{"id":"data-viz-design","deliverableKey":"data-viz-design","title":"Design","enableCondition":"TRUTHY"},{"id":"data-viz-develop","deliverableKey":"data-viz-design","title":"Development","enableCondition":"TRUTHY"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.apiDefinition.addons.api","allowMultiple":true,"icon":"question","description":"Need more than 5 APIs developed or integrated?","theme":"light","title":"API add-ons","type":"add-ons","category":"data-viz"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"condition":"( HAS_NEW_REPORTS_DELIVERABLE || NEED_NEW_DESIGNS )","type":"estimation","title":"Your project timeline","deliverables":[{"id":"data-viz-design","deliverableKey":"data-viz-design","title":"Design","enableCondition":"TRUTHY"},{"id":"data-viz-develop","deliverableKey":"data-viz-design","title":"Development","enableCondition":"TRUTHY"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-05-31T08:40:34.000Z","updatedAt":"2020-04-21T15:12:36.790Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":243,"name":"Compatibility Testing","key":"qa_compatibility_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform/ Devices/ Browsers
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos of logged defects
  • \n
\n
"}]},"icon":"compatibility-testing","question":"What kind of quality assurance (QA) do you need?","info":"Cross-browser, device testing including network, geographical coverage to assure app launch success.","aliases":["qa_compatibility_testing","qa-compatibility-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Compatibility Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will compatibility testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Compatibility Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:30:51.172Z","updatedAt":"2020-04-21T15:12:36.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":203,"name":"Buy Capacity","key":"prepaid_budget","category":"unscoped-solutions","subCategory":null,"metadata":{},"icon":"api","question":"What type of solution you want? ","info":"Have a variety of work you are seeking to accomplish? You can purchase prepaid budget with Topcoder to use how you need.","aliases":["prepaid_budget","prepaid-budget"],"scope":{"buildingBlocks":{"FREE_SIZE_DESIGN_BUDGET":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"8089","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE )"},"FREE_SIZE_DEV_BUDGET":{"maxTime":10,"metadata":{"deliverable":"development"},"price":"6416","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE )"},"FREE_SIZE_DATA_SCIENCE_BUDGET":{"maxTime":10,"metadata":{"deliverable":"data-science"},"price":"1086","minTime":10,"conditions":"( HAS_DATA_SCIENCE_DELIVERABLE )"},"FREE_SIZE_QA_BUDGET":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1687","minTime":10,"conditions":"( HAS_QA_DELIVERABLE )"}},"preparedConditions":{"HAS_DEV_DELIVERABLE":"(details.budgetDetails.deliverables contains 'dev')","FALSY":"1 == 2","HAS_DATA_SCIENCE_DELIVERABLE":"(details.budgetDetails.deliverables contains 'data-science')","TWO_DELIVERABLES":"(details.budgetDetails.deliverables hasLength 2)","HAS_API_INTEGRATION_ADDON":"(details.budgetDetails.addons.api contains '{\"productKey\":\"additional-api-integration\"}')","HAS_DESIGN_DELIVERABLE":"(details.budgetDetails.deliverables contains 'design')","THREE_DELIVERABLES":"(details.budgetDetails.deliverables hasLength 3)","ONE_DELIVERABLE":"(details.budgetDetails.deliverables hasLength 1)","CA_NEEDED":"(details.budgetDetails.caNeeded == 'yes')","HAS_API_DEVELOPMENT_ADDON":"(details.budgetDetails.addons.api contains '{\"productKey\":\"additional-api-development\"}')","HAS_QA_DELIVERABLE":"(details.budgetDetails.deliverables contains 'qa')","FOUR_DELIVERABLES":"(details.budgetDetails.deliverables hasLength 4)","CA_NOT_NEEDED":"(details.budgetDetails.caNeeded != 'yes')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES":[["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DEV_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"]],"THREE_DELIVERABLES":[["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"]],"ONE_DELIVERABLE":[["FREE_SIZE_DESIGN_BUDGET"],["FREE_SIZE_DEV_BUDGET"],["FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DATA_SCIENCE_BUDGET"]],"FOUR_DELIVERABLES":[["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description"},"theme":"light","validations":"isRequired","type":"textbox","title":"Provide a high-level description of how you plan to use your prepaid budget, so we can set you up for success from the start.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Prepaid Budget"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.budgetDetails.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev"},{"description":"Data science budget","label":"Data Science","value":"data-science"},{"summaryLabel":"QA","description":"Standard quality assurance testing.","label":"Quality Assurance","value":"qa"}],"description":"","theme":"light","validations":"isRequired","title":"What type of budget do you need?","type":"checkbox-group","summaryTitle":"Type of budget","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"layout":{"spacing":"codes"},"hideTitle":true,"questions":[{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'design'","fieldName":"details.budgetDetails.design.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($10K x 2 = $20K budget)","title":"How much design budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"Design Units","introduction":"Price: $10K budget increments"},{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'dev'","fieldName":"details.budgetDetails.development.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($10K x 2 = $20K budget)","title":"How much development budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"Development Units","introduction":"Price: $10K budget increments"},{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'data-science'","fieldName":"details.budgetDetails.dataScience.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($10K x 2 = $20K budget)","title":"How much data science budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"Data Science Units","introduction":"Price: $10K budget increments"},{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'qa'","fieldName":"details.budgetDetails.qa.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($3.5K x 2 = $7K budget)","title":"How much QA budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"QA Units","introduction":"Price: $3.5K budget increments"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Prepaid Budget","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"dev","deliverableKey":"development","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"id":"data-science","deliverableKey":"data-science","title":"Data Science","enableCondition":"HAS_DATA_SCIENCE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.apiDefinition.addons.api","allowMultiple":true,"icon":"question","description":"Need more than 5 APIs developed or integrated?","theme":"light","title":"API add-ons","type":"add-ons","category":"prepaid-budget"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"dev","deliverableKey":"development","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"id":"data-science","deliverableKey":"data-science","title":"Data Science","enableCondition":"HAS_DATA_SCIENCE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-05-30T07:07:47.000Z","updatedAt":"2020-04-21T15:12:36.789Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":101,"name":"QA Services","key":"qa_form","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"detailLink":"https://connect.topcoder-dev.com","deliverables":[{"infoHTML":"

Expected Deliverables

  • Test Case Creation: Documented test cases, including Description, Execution Steps, Expected Result, Expected Result screenshot (if access given)
  • Test Case Execution: Test case execution report for unique case runs, and a validated defect log including screenshot/video attachments. Standard delivery process performs 3 unique runs per test case.
"}]},"icon":"test","question":"test","info":"Test, identify and fix bugs in your software","aliases":["qa_form","qa-form"],"scope":{"buildingBlocks":{"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8845","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"9163","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8179","minTime":5,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"8793","minTime":17,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4328","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7916","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8872","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6941","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9953","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"6410","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8207","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"5510","minTime":12,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"6836","minTime":17,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"4779","minTime":10,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"3729","minTime":28,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1027","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"PERFORMANCE_TESTS":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"2675","minTime":20,"conditions":"(PERFORMANCE_TESTING)"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4350","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"9508","minTime":28,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3058","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"251","minTime":7,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4979","minTime":5,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3545","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"6534","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"8224","minTime":12,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3511","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3320","minTime":10,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9585","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8138","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"1775","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4630","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2383","minTime":7,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"}},"preparedConditions":{"TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","ONE_DELIVERABLE":"true","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"hidePrice":true,"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Real World Unstructured Testing doesn't use pre-defined test scripts -- this is true “in-the-wild” testing that can provide many forms of feedback on your application, from functional issues, user experience issues, user interface issues, and content issues to name a few.

Real World Structured Testing can help produce and execute structured test cases quickly.

Mobility Testing by Topcoder can target up to 5 devices using our community of QA experts.

Automation Test Suites can be created by Topcoder using tools like Selenium, starting at up to 50 test cases.

Performance Testing by Topcoder will allow you to test several key functions of your application at scale with hundreds of virtual users. Reporting will be provided with specific recommendations to address any performance issues.

"},"fieldName":"details.appDefinition.qaType","icon":"question","options":[{"description":"Generate feedback with “in-the-wild” exploratory, functional feature testing with real users, providing feedback on compatibility, accessibility compliance, localization/language, and/or user sentiment.","label":"Unstructured Testing","value":"real-world-unstructured"},{"summaryLabel":"Structured Testing","description":"Create test cases, execute established test cases, and generate feedback with real users. Great for UAT or regression testing as part of your SDLC.","label":"Structured Testing (Test Case Creation and/or Execution)","value":"real-world-structured"},{"description":"Execute functional or non-functional testing including device compatibility certification and competitive analysis.","label":"Mobility Testing","value":"mobility-testing"},{"description":"Build reusable frameworks and test scripts using open source tools to accelerate app delivery and improve ROI","label":"Automated Testing","value":"automated-testing"},{"description":"Test responsiveness and stability of web and mobile applications under specific workloads, and identify actionable items for improvement.","label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","summaryTitle":"QA Service","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","description":"","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.structuredTestsCount","icon":"question","description":"","title":"How many test cases do you need?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens need to be tested?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.qaType == 'real-world-unstructured'","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"details.appDefinition.qaType != 'performance-testing'","hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Project Manager + Architect","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"Project Manager","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-03-12T05:55:22.000Z","updatedAt":"2020-04-21T15:12:36.789Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":30,"name":"Wireframes 1","key":"cs_wireframes 1","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-design.svg","question":"What kind of design do you need?","info":"Plan and explore the navigation and structure of your app","aliases":["cs-wireframes"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"10"},"price":5617,"icon":"NumberText","title":"screens","value":"10","desc":"7-10 days"},{"iconOptions":{"number":"15"},"price":3564,"icon":"NumberText","title":"screens","value":"15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Wireframes","productName":"Wireframes","required":true}]},"phases":{"1-wireframe-design-i":{"duration":25,"name":"Wireframe Design, Pt. I","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"2-wireframe-design-ii":{"duration":25,"name":"Wireframe Design, Pt. II","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:48:44.000Z","updatedAt":"2020-04-21T15:12:36.786Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":49,"name":"Test Project Intake Dev","key":"test_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_dependent_questions","test-dependent-questions"],"scope":{"wizard":{"enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox","dependent":true}],"description":"","wizard":{"enabled":true},"id":"application-nformation","title":"Application Information","type":"questions-with-cascade","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","wizard":{"enabled":true},"id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group","dependent":true},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox","dependent":true},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group","dependent":true},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true}],"description":"","wizard":{"enabled":true},"id":"testing-nformation","title":"Testing Information","type":"questions-with-cascade","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Design Specs Notes","type":"notes"}],"description":"Please answer a few basic questions about your design specs.","wizard":{"enabled":false},"id":"designSpecification","title":"Design Specs","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-10T07:03:31.000Z","updatedAt":"2020-04-21T15:12:36.785Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":242,"name":"Exploratory Testing","key":"qa_exploratory_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"exploratory-testing","question":"What kind of quality assurance (QA) do you need?","info":"Validate functionality and usability of web and mobile apps in-the-wild with real-life users.","aliases":["qa_exploratory_testing","qa-exploratory-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Exploratory Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will exploratory testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Exploratory Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:25:58.815Z","updatedAt":"2020-04-21T15:12:36.790Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":228,"name":"Development Integration","key":"cs_generic_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"Development Integration","info":"Get help with any part of your app or software","aliases":["cs-generic-development-1"],"scope":{"buildingBlocks":{},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Ideation"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsIdeation.problemStatement","icon":"question","description":"","title":"Please state the problem you would like to solve.","type":"textbox","summaryTitle":"Problem Statement","required":true,"validationError":"Please, provide problem statement/concept for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria you would like to use for deciding winning options."},{"fieldName":"details.dsIdeation.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Ideation","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-12-20T10:41:51.187Z","updatedAt":"2020-04-21T15:12:36.787Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":230,"name":"Digital As A Service v1","key":"daas_v1","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"What type of digital service you are looking for?","info":"digital as a service","aliases":["digital_as_a_service_v1"],"scope":{"buildingBlocks":{},"preparedConditions":{"HAS_API_MANAGEMENT_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIManagement')","DATA_ENRICHMENT_REQUIRED":"(details.daasDefinition.apiManagement.dataEnrichment == 'Yes')","HAS_B2B_DELIVERABLE":"(details.daasDefinition.deliverables contains 'b2bServices')","DATA_TRANFORMATION_REQUIRED":"(details.daasDefinition.apiManagement.dataTransformation == 'Yes')","CLOUD_MODEL_REQUIRED":"(details.daasDefinition.a2a.cloudModel == 'other')","HAS_A2A_DELIVERABLE":"(details.daasDefinition.deliverables contains 'a2aServices')","HAS_OTHER_PROTOCOL":"(details.daasDefinition.protocols == 'Other')","TRUTHY":"( 1 == 1)","CLOUD_DEPLOYMENT_PREFERENCE":"(details.daasDefinition.a2a.deploymentPref == 'other')","HAS_API_MICROSERVICE_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIAndMicroservice')","FILE_TRANSFER_REQUIRED":"(details.daasDefinition.fileTransfer == 'Yes')","FALSY":"( 1 == 2)"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Title your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.daasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"B2BServices","description":"Automation of business processes and communication/data exchange between two or more organizations.","label":"Business to Business Services","value":"b2bServices"},{"summaryLabel":"A2AServices","description":"Integration between applications.","label":"Application to Application Services","value":"a2aServices"},{"summaryLabel":"API & Microservice","description":"Enable integration and modernization of applications using gateways and microservices framework.","label":"API Implementation & Microservices","value":"APIAndMicroservice"},{"summaryLabel":"API Management","description":"The API governing process for a secure and scalable environment, using tools like APIGEE, Layer 7, IBM API Connect, etc.","label":"API Management","value":"APIManagement"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"radio-group","summaryTitle":"Solution Needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"condition":"HAS_B2B_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Understanding the number of partner organizations that will be onboarded provides context on:
- Number of organization profiles to be configured
- Number of partner profiles
- Number of security methods to be configured
- Number of defined contracts for trading partners

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.b2b.partnerOrgs","icon":"question","description":"","title":"How many partner organizations will be onboarded?","type":"textbox","summaryTitle":"Partner Orgs","required":true,"validationError":"Please, describe your partner orgnizations"},{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Knowing this highlights the number of unique interfaces that will need to be designed and developed, as well as how many will require scheduling and configuration.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.interfaces","icon":"question","description":"","title":"How many interfaces will need to be developed?","type":"textbox","summaryTitle":"Interfaces","required":true,"validationError":"Please, describe interfaces to be developed"},{"help":{"linkTitle":"Why is this important?","title":"Why is this important?","content":"

The type of protocol indicates how the business to business services will be connected and communicate.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.protocols","icon":"question","options":[{"summaryLabel":"AS2","description":"","label":"AS2","value":"AS2"},{"summaryLabel":"AS4","description":"","label":"AS4","value":"AS4"},{"summaryLabel":"Webservice","description":"","label":"Webservice","value":"Webservice"},{"summaryLabel":"SFTP","description":"","label":"SFTP","value":"SFTP"},{"summaryLabel":"Other","description":"","label":"Other","value":"Other"}],"description":"","theme":"light","title":"What type of protocol should be used?","type":"radio-group","summaryTitle":"Protocol","required":true,"validationError":"Please, select the protocol"},{"condition":"HAS_B2B_DELIVERABLE && HAS_OTHER_PROTOCOL","fieldName":"details.daasDefinition.protocolDesc","icon":"question","description":"","title":"Describe your desired protocol?","type":"textbox","summaryTitle":"Other desc","required":true,"validationError":"Please, describe other protocol"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.maps","icon":"question","description":"","title":"How many maps will need to be developed?","type":"textbox","summaryTitle":"Maps","required":true,"validationError":"Please, describe maps"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.fileTransfer","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":" Will you need managed file transfer services?","type":"radio-group","summaryTitle":"File transfer","required":true,"validationError":"Please, select one option"},{"condition":"HAS_B2B_DELIVERABLE && FILE_TRANSFER_REQUIRED","fieldName":"details.daasDefinition.fileSize","icon":"question","description":"","title":"What is the maximum size of file to transfer? ?","type":"textbox","summaryTitle":"File Size","required":true,"validationError":"Please, provide the size of file"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"b2b-solution","type":"questions"},{"condition":"HAS_A2A_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking?","content":"

Interface or integration service enables the communication of disparate software components.

"},"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.interfaces","icon":"question","description":"","title":"How many interfaces or integration services are in scope?","type":"textbox","summaryTitle":"Interfaces/Services","required":true,"validationError":"Please, describe how many interfaces are in scope"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.mappingFields","icon":"question","description":"","title":"How many fields require mapping?","type":"textbox","summaryTitle":"mapping fields","required":true,"validationError":"Please, describe mapping fields"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.destinationEndPoints","icon":"question","description":"","title":"How many destination end points are there?","type":"textbox","summaryTitle":"Destination End Points","required":true,"validationError":"Please, provide the destination end points"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataTransformMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data transformation method?","type":"radio-group","summaryTitle":"Data Transformation Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.orchestrationMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data process or service orchestration method?","type":"radio-group","summaryTitle":"Orchestration Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data enrichment be required?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.securityScheme","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will security scheme implementation be required?","type":"radio-group","summaryTitle":"Security Scheme","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.businessRule","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will business rule implementation be required?","type":"radio-group","summaryTitle":"Business Rule","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.hybridIntegration","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Is hybrid integration required?","type":"radio-group","summaryTitle":"Hybrid Integration","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.cloudModel","icon":"question","options":[{"label":"IaaS","value":"iaas"},{"label":"PaaS","value":"paas"},{"label":"SaaS","value":"saas"},{"label":"Multi-cloud","value":"multiCloud"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What cloud model are you using in the application layer?","type":"radio-group","summaryTitle":"Cloud Model","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_MODEL_REQUIRED","fieldName":"details.daasDefinition.a2a.cloudModelDesc","icon":"question","description":"","title":"Describe your cloud model","type":"textbox","summaryTitle":"Cloud Model","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.deploymentPref","icon":"question","options":[{"label":"On-premise","value":"onPremise"},{"label":"On-cloud","value":"onCloud"},{"label":"iPaaS","value":"ipaas"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What is your cloud deployment preference?","type":"radio-group","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_DEPLOYMENT_PREFERENCE","fieldName":"details.daasDefinition.a2a.cloudDeploymentDesc","icon":"question","description":"","title":"Describe your cloud deployment preference","type":"textbox","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.serviceContainerization","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does your services need to be containerized?","type":"radio-group","summaryTitle":"Service Containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"a2a-solution","type":"questions"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.count","icon":"question","description":"","title":"How many APIs & microservices require development?","type":"textbox","summaryTitle":"APIs & Microservices","required":true,"validationError":"Please, describe APIs & microservices to be developed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.restOperations","icon":"question","description":"","title":"How many REST operations will be exposed?","type":"textbox","summaryTitle":"REST Operations","required":true,"validationError":"Please, describe REST operations to be exposed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dbTables","icon":"question","description":"","title":"How many database tables will be queried?","type":"textbox","summaryTitle":"Database Tables","required":true,"validationError":"Please, describe database tables to be queried?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.modelClasses","icon":"question","description":"","title":"How many model classes need to be developed?","type":"textbox","summaryTitle":"Model Classes","required":true,"validationError":"Please, describe model classes to be developed?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.methods","icon":"question","description":"","title":"How many methods are in the service layer?","type":"textbox","summaryTitle":"Service Layer Methods","required":true,"validationError":"Please, describe methods in the service layer"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.externalAPIs","icon":"question","description":"","title":"How many external APIs or services will be utilized?","type":"textbox","summaryTitle":"External APIs","required":true,"validationError":"Please, describe external APIs"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.requestFields","icon":"question","description":"","title":"How many fields are in the request?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.validatedFields","icon":"question","description":"","title":"How many request fields require validation?","type":"textbox","summaryTitle":"Validated Request Fields","required":true,"validationError":"Please, describe validated request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.responseFields","icon":"question","description":"","title":"How many fields are in the response?","type":"textbox","summaryTitle":"Response Fields","required":true,"validationError":"Please, describe response fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.commProtocol","icon":"question","description":"","title":"What inter-service communication protocol should be used?","type":"textbox","summaryTitle":"InterService Comm Protocol","required":true,"validationError":"Please, describe inter-service communication protocol"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dataCaching","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data caching be required?","type":"radio-group","summaryTitle":"Data Caching","required":true,"validationError":"Please, select one option"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.serviceContainers","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do services need to be containerized?","type":"radio-group","summaryTitle":"Service containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiImplementationAndMicroservice-solution","type":"questions"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.count","icon":"question","description":"","title":"How many APIs will be exposed?","type":"textbox","summaryTitle":"APIs","required":true,"validationError":"Please, describe APIs to be exposed"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.requstFields","icon":"question","description":"","title":"How many request fields are in the APIs?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.serviceCalls","icon":"question","description":"","title":"How many backend service calls are expected?","type":"textbox","summaryTitle":"Backend Service Calls","required":true,"validationError":"Please, describe backend service calls"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataTransformation","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data transformation?","type":"radio-group","summaryTitle":"Data Transformation","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_TRANFORMATION_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.tranformationFields","icon":"question","description":"","title":"How many fields require data transformation?","type":"textbox","summaryTitle":"Data Tranform Fields","required":true,"validationError":"Please, describe fields require for data transformation"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data enrichment?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_ENRICHMENT_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.enrichmentFields","icon":"question","description":"","title":"How many fields require data enrichment?","type":"textbox","summaryTitle":"Data Enrichment Fields","required":true,"validationError":"Please, describe fields require for data enrichment"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.communicationProtocol","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does the communication protocol require transformation?","type":"radio-group","summaryTitle":"Communication Protocol","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiManagement-solution","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Digital As A Service","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-01-21T03:23:35.308Z","updatedAt":"2020-04-21T15:12:36.788Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":103,"name":"New app - updated design 3","key":"app-new-updated-designs-","category":"app","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"test","aliases":["app-new-updated-designs-3","anud3"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6120","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6614","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"2914","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"2833","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"2266","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"4186","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"4736","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8058","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"9770","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2355","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3306","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1982","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"2440","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1102","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"420","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5212","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2618","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"756","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"6256","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4176","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"6545","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"8464","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"681","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4293","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3075","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2722","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"7606","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"1684","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"5147","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"6057","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"7619","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5819","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2536","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"9509","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"3001","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8446","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"6077","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"850","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"5024","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3270","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7705","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6950","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9419","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5780","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6052","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"4029","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"6443","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1489","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"837","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3724","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"7742","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1377","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9030","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8150","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"4765","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3915","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7065","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6817","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1152","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"597","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3048","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4547","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8680","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"5422","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5460","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1339","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8424","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"8365","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"9119","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1814","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6741","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8962","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5076","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2602","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5248","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3468","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"1964","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"512","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8941","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2065","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"3888","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3333","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3868","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"5149","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"991","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1934","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"3373","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"5064","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"8321","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"6381","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3731","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"9403","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4977","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6194","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3455","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1292","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"9535","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"8058","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5428","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"1016","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"9646","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"5865","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"569","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"5227","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"3431","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"2323","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"7797","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2588","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8371","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"3357","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"5401","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"4343","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7587","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4790","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"2017","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"769","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"1314","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9764","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1919","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9788","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3827","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"9637","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"261","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4477","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4637","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3908","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7485","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7034","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5395","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"4313","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5468","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"9566","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9324","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"5423","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1683","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4440","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6447","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"277","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"790","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"2702","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

If you have an existing application that needs quality assurance testing, only select the QA, Fixes & Enhancements option and you will be shown Topcoder’s standalone QA Services solutions for testing on pre-existing applications.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your app, log and eliminate any bugs. This will ensure sure your app is 100% ready for prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new customer to Topcoder and need additional help navigating the crowdsourcing process as Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":24,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-08T11:21:46.000Z","updatedAt":"2020-04-21T15:12:36.786Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":102,"name":"Form example","key":"form-example","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["form-example","form_example"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8493","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1442","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"4947","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8318","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"5053","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"1109","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"1682","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"357","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"8109","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8536","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"412","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8941","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"7317","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7467","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6996","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9510","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"696","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9644","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"4295","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9262","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7567","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"1521","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"5201","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2263","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3526","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7577","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8605","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"4639","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"4571","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"153","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2522","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5325","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"6395","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"7221","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"4762","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5664","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8962","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"735","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"5365","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4381","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1287","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"2821","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9142","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5258","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4368","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"5784","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"5893","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3772","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"4889","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"190","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"2876","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"4345","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"450","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4712","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"1287","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"844","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7845","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2672","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9706","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7244","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5905","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8454","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"2716","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"7369","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8316","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1456","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9971","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"7291","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"4363","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"7086","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"2864","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3481","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5491","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9565","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7093","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8693","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9649","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"10032","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9983","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1285","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2329","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"8984","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8626","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"2891","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3659","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"851","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"5751","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"2473","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"1165","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"5788","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5076","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"1153","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2628","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1960","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7772","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8361","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"9631","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7620","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9457","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"3217","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"10012","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"1162","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6371","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"7290","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8306","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"2441","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"1493","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3793","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6733","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"4908","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"2200","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"948","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5867","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3041","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8194","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"8448","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"193","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"559","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"5964","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"864","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9605","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"8761","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4501","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"5483","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4909","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1165","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"6872","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3449","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7697","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"4824","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9231","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"9763","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"579","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"1227","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9020","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5881","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1054","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"3975","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6013","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"4298","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"(details.appDefinition.deliverables contains 'dev-qa')","summaryLabel":"QA","autoSelectCondition":"(details.appDefinition.deliverables contains 'dev-qa')","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'design')","options":[{"disableCondition":"details.appDefinition.deliverables contains 'dev-qa'","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"(details.appDefinition.deliverables contains 'dev-qa')","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.designGoal == 'concept-designs' )","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"(details.appDefinition.quickTurnaround != 'under-3-days')","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"(details.appDefinition.deliverables hasLength 1) && (details.appDefinition.deliverables contains 'qa')","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"details.appDefinition.deliverables contains 'deployment'","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.deliverables contains 'deployment'","options":[{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"( (!( details.appDefinition.targetDevices hasLength 1 )) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'design')","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'dev-qa')","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'qa')","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'deployment')","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-03-18T07:25:30.000Z","updatedAt":"2020-04-21T15:12:36.784Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":207,"name":"test","key":"subtitle-skills-api","category":"app","subCategory":null,"metadata":{},"icon":"product-analytics-computer-vision","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["subtitle-skills-api","subtitle_skills_api"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9599","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6541","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"5000","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5650","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"4036","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"1902","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"9670","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8851","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"9786","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6079","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"6894","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4162","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"9373","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6799","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"870","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3757","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8862","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6051","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"2859","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5378","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"8778","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"6033","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"2891","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2119","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"152","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5749","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1471","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"5377","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"9770","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1200","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"7724","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3933","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"8673","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"9577","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"3688","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4798","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1282","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"8227","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"3056","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1161","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2411","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3817","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6841","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2619","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9162","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1850","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"1159","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"4948","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7404","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5299","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"7432","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2855","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"7058","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2729","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"10010","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8225","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3983","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8329","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4353","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1321","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6087","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3972","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8736","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"3190","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3790","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5225","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1916","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"5985","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"8292","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"7245","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5185","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9505","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4254","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6229","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1957","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4833","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"4757","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8339","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9262","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1210","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"999","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3761","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"2955","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"8867","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1447","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"574","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"5439","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"8763","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"250","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"2558","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"6764","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"4193","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5460","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8911","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3924","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7958","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3646","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"3326","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6184","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"7822","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"9387","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"9429","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3205","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"9100","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8148","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"370","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"3359","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7328","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9568","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7269","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"9675","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"4564","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5623","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"293","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"2029","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"2104","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"2379","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2842","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"4150","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7768","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"8237","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6484","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"435","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"1437","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"5729","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4757","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4593","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"156","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2563","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"7910","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1462","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"682","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"6046","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"8289","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3628","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8001","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8432","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"2468","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4930","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"8951","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":{"categoriesMapping":{"dev-qa":"DEVELOP","design":"DESIGN"},"frequent":[1,4,7,10,13,16,5905414,15035679,22839204,26740933,26854281,26930938,26951709,27048250],"categoriesField":"details.appDefinition.deliverables"},"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"I need best-in-class, research-grade outcomes. I am willing to accept a longer lead-time of 5-6 weeks, wherein real-time competition and objective scoring on a public leaderboard delivers maximum performance results.","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-06-12T08:31:50.000Z","updatedAt":"2020-04-21T15:12:36.785Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":221,"name":"Design, Development & Deployment","key":"app_new_intake","category":"scoped-solutions","subCategory":"applications-and-websites","metadata":{"deliverables":[{"subTextHTML":"","infoHTML":"

Design

  • A fully polished frontend user interface design delivered in your choice of Photoshop, Illustrator, Sketch, or XD
  • Interactive design demo links using industry leading tools
"},{"subTextHTML":"","infoHTML":"

Development

  • Microservices Architecture
  • API Specs
  • Frontend Development
  • Backend Development
  • Database Development
  • Crash/Error Logging
  • Security Scan
  • Unit Tests
  • Test Cases
  • Quality Assurance Testing
  • Defect Remediation
  • User Acceptance Testing
  • UAT Enhancements
"},{"subTextHTML":"","infoHTML":"

Deployment

  • Configuration of leading CI/CD tools with your code base.
  • Assistance launching applications in the Apple and Google Play stores.
  • Code base deployment to internal production environments
"}]},"icon":"applications-websites","question":"test","info":"Design, build, test and deploy beautiful web mobile applications, mobile apps, backend services, integrations, and more. Choose where you need support and get going on creating something amazing!","aliases":["app_new_intake"],"scope":{"buildingBlocks":{"ADMIN_TOOL_DEV_ADDON":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"409","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON )"},"GOOGLE_ANALYTICS_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6209","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON )"},"API_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1433","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON )"},"SSO_INTEGRATION_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7031","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON )"},"RESP_APP_SOLUTION":{"maxTime":55,"metadata":{"deliverable":"dev-qa"},"price":"5317","minTime":55,"conditions":"( HAS_DEV_DELIVERABLE && RESP_APP_SOLUTION )"},"OFFLINE_CAPABILITY_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7959","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON )"},"DESIGN_DIRECTION_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5957","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON )"},"DESIGN_BLOCK":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"2707","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE )"},"LOCATION_SERVICES_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9570","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON )"},"RUX_BLOCK":{"maxTime":8,"metadata":{"deliverable":"design"},"price":"1810","minTime":8,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN )"},"SVC_BLOCK":{"maxTime":0,"metadata":{"deliverable":"dev-qa"},"price":"5900","minTime":0,"conditions":"( HAS_DEV_DELIVERABLE )"},"ZEPLIN_APP_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"2815","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON )"},"INTERNAL_DEPLOY_SOLUTION":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"8913","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT)"},"MAZE_UX_TESTING_ADDON":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"1326","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON )"},"RESP_UI_PROTOTYPE_ADDON":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7600","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON )"},"WEB_APP_SOLUTION":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"7619","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && WEB_APP_SOLUTION )"},"DESIGN_SOLUTION":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"8501","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN)"},"CI_CD_ADDON":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"3411","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON )"},"BLACKDUCK_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8757","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON )"},"QA_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5077","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MOBILE_ENT_SECURITY_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9040","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON )"},"UNIT_TESTING_ADDON":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7054","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON )"},"CONTAINERIZED_CODE_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"726","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON )"},"SMTP_SERVER_SETUP_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7963","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON )"},"RESP_DESIGN_IMPL_ADDON":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"347","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON )"},"CHECKMARX_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7658","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON )"},"AUTOMATION_TESTING_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"6920","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON )"},"TWO_OS_MOBILE_DESKTOP_SOLUTION":{"maxTime":55,"metadata":{"deliverable":"dev-qa"},"price":"8762","minTime":55,"conditions":"( HAS_DEV_DELIVERABLE && MOBILE_DEVICES && ( ONLY_TWO_OS_MOBILE_DESKTOP ) )"},"DESIGN_BLOCK_FOR_DEV":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5941","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"UI_PROTOTYPE_ADDON":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5247","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON )"},"SOCIAL_MEDIA_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3629","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON )"},"MOBILE_DEPLOY_SOLUTION":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"701","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT)"},"THIRD_PARTY_INTEGRATION_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9881","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON )"},"TWO_OS_MOBILTY_SOLUTION":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"8805","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && MOBILE_DEVICES && ( ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE ) )"},"PERF_TESTING_ADDON":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"5328","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON )"},"UAT_ENHANCEMENTS_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3647","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON )"},"WIREFRAMES_ADDON":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"8370","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON )"},"API_INTEGRATION_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"657","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON )"},"ONE_OS_MOBILTY_SOLUTION":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"6080","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ((MOBILE_DEVICES && ONLY_ONE_OS_MOBILE && !(WEB_DEVICE)) || (WEB_DEVICE && ONLY_ONE_OS_PROGRESSIVE)) )"},"DEV_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3227","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MIN_BATTERY_USE_IMPL_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9710","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON )"},"BACKEND_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9100","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON )"},"SMS_GATEWAY_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1200","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON )"},"DESIGN_RUX_SOLUTION":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"3700","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN )"}},"preparedConditions":{"HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","MOBILITY_SOLUTION":"!(details.appDefinition.mobilePlatforms hasLength 0)","ONLY_ONE_OS_PROGRESSIVE":"( details.appDefinition.targetDevices hasLength 1 && details.appDefinition.targetDevices contains 'web-browser' && details.appDefinition.webBrowserBehaviour == 'progressive' )","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","MOBILE_DEVICES":"(details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","WEB_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'desktop')","WEB_DEVICE":"(details.appDefinition.targetDevices contains 'web-browser')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CUSTOM_QUOTE":"((details.appDefinition.webBrowserBehaviour == 'responsive' || details.appDefinition.designGoal == 'concept-designs') && !(details.appDefinition.targetDevices hasLength 0 || details.appDefinition.targetDevices hasLength 1)) || details.appDefinition.needAdditionalScreens == 'yes'","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","NEED_ADDITIONAL_SCREENS":"(details.appDefinition.needAdditionalScreens == 'yes')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","RESP_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'responsive')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.webBrowserBehaviour == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","ONLY_ONE_OS_MOBILE":"( details.appDefinition.mobilePlatforms hasLength 1 || details.appDefinition.nativeHybrid == 'hybrid' )","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","ONLY_TWO_OS_BOTH_MOBILES":"(details.appDefinition.mobilePlatforms hasLength 2 && details.appDefinition.nativeHybrid != 'hybrid')","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","IS_WEB_RESP_APP":"(details.appDefinition.webBrowserBehaviour == 'responsive')","CONCEPT_DESIGN":"( details.appDefinition.designGoal == 'concept-designs' )","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","FALSY":"1 == 2","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.webBrowserBehaviour == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["CI_CD_ADDON"]],"HAS_DESIGN_DELIVERABLE":[["WIREFRAMES_ADDON"],["UI_PROTOTYPE_ADDON"],["RESP_UI_PROTOTYPE_ADDON"],["ZEPLIN_APP_ADDON"],["DESIGN_DIRECTION_ADDON"],["MAZE_UX_TESTING_ADDON"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON"],["API_INTEGRATION_ADDON"],["OFFLINE_CAPABILITY_ADDON"],["MIN_BATTERY_USE_IMPL_ADDON"],["SMTP_SERVER_SETUP_ADDON"],["BACKEND_DEVELOPMENT_ADDON"],["RESP_DESIGN_IMPL_ADDON"],["ADMIN_TOOL_DEV_ADDON"],["LOCATION_SERVICES_ADDON"],["CONTAINERIZED_CODE_ADDON"],["GOOGLE_ANALYTICS_ADDON"],["SSO_INTEGRATION_ADDON"],["THIRD_PARTY_INTEGRATION_ADDON"],["SMS_GATEWAY_INTEGRATION_ADDON"],["SOCIAL_MEDIA_INTEGRATION_ADDON"],["MOBILE_ENT_SECURITY_ADDON"],["CHECKMARX_SCANNING_ADDON"],["BLACKDUCK_SCANNING_ADDON"],["AUTOMATION_TESTING_ADDON"],["PERF_TESTING_ADDON"],["UNIT_TESTING_ADDON"],["UAT_ENHANCEMENTS_ADDON"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"(!(CUSTOM_QUOTE) && HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE)":[["WEB_APP_SOLUTION"],["RESP_APP_SOLUTION"],["ONE_OS_MOBILTY_SOLUTION"],["TWO_OS_MOBILTY_SOLUTION"]],"(!(CUSTOM_QUOTE) && HAS_DESIGN_DELIVERABLE && ONE_TARGET_DEVICE)":[["DESIGN_SOLUTION"],["DESIGN_RUX_SOLUTION"]],"(!(CUSTOM_QUOTE) && HAS_DESIGN_DELIVERABLE && TWO_TARGET_DEVICES)":[["DESIGN_SOLUTION","DESIGN_SOLUTION"]],"FALSY && MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_TWO_OS_BOTH_MOBILES":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(FALSY && HAS_DESIGN_DELIVERABLE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK"],["RUX_BLOCK"]],"(!(CUSTOM_QUOTE) && HAS_DEPLOY_DELIVERABLE )":[["MOBILE_DEPLOY_SOLUTION"],["INTERNAL_DEPLOY_SOLUTION"]],"(FALSY && HAS_DESIGN_DELIVERABLE && TWO_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK"]],"(FALSY && WEB_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(FALSY && HAS_DESIGN_DELIVERABLE && THREE_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK","DESIGN_BLOCK"]],"FALSY && MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_ONE_OS_MOBILE":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(!(CUSTOM_QUOTE) && HAS_DEV_DELIVERABLE && THREE_TARGET_DEVICES)":[["TWO_OS_MOBILE_DESKTOP_SOLUTION"]],"(FALSY && RESP_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(!(CUSTOM_QUOTE) && HAS_DESIGN_DELIVERABLE && THREE_TARGET_DEVICES)":[["DESIGN_SOLUTION","DESIGN_SOLUTION","DESIGN_SOLUTION"]],"(!(CUSTOM_QUOTE) && HAS_DEV_DELIVERABLE && TWO_TARGET_DEVICES)":[["ONE_OS_MOBILTY_SOLUTION"],["TWO_OS_MOBILTY_SOLUTION"],["TWO_OS_MOBILE_DESKTOP_SOLUTION"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"Designers will produce up to 8 high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"condition":"CONCEPT_DESIGN","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 8 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 8 screens?","required":true},{"condition":"COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 15 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 15 screens?","required":true},{"condition":"(CONCEPT_DESIGN && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"8-16","description":"","label":"8-16 screens","value":"8-16"},{"summaryLabel":"16-24","description":"","label":"16-24 screens","value":"16-24"},{"summaryLabel":"24-32","description":"","label":"24-32 screens","value":"24-32"},{"summaryLabel":"32-40","description":"","label":"32-40 screens","value":"32-40"},{"summaryLabel":"40+","description":"","label":"40+ screens","value":"40+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true},{"condition":"((COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"15-30","description":"","label":"15-30 screens","value":"15-30"},{"summaryLabel":"30-45","description":"","label":"30-45 screens","value":"30-45"},{"summaryLabel":"45-60","description":"","label":"45-60 screens","value":"45-60"},{"summaryLabel":"60+","description":"","label":"60+ screens","value":"60+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Topcoder’s standard concept design solution provides concept designs for one device. If you require concept designs for more than one device, please select all device types required and we will send you a custom proposal.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"CONCEPT_DESIGN","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"( ( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN ) || HAS_DEV_DELIVERABLE)","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.mobilePlatforms","icon":"question","description":"","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms","required":true,"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (CONCEPT_DESIGN ) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","affectsQuickQuote":true,"options":[{"description":"Your designs will be tailored to iOS mobile devices.","label":"iOS","value":"ios"},{"description":"Your designs will be tailored to Android mobile devices.","label":"Android","value":"android"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.mobilePlatforms","icon":"question","description":"","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms","required":true,"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","affectsQuickQuote":true,"options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Should your app use a native or hybrid framework?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( HAS_DEV_DELIVERABLE && ( details.appDefinition.mobilePlatforms contains 'ios' || details.appDefinition.mobilePlatforms contains 'android' ))","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.webBrowserBehaviour","icon":"question","description":"","title":"How should your app work in web browsers?","type":"radio-group","summaryTitle":"Web browser behaviour","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Responsive Web Applications can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Progressive Web Applications are built using a native framework. Benefits of a PWA include app installation, reliable launching despite network conditions, and more engaging content.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your responsive web app can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"I want a web app that is responsive to all device types, including desktop.","value":"responsive"},{"description":"Your progressive web app can be installed on a desktop device, ensuring faster and more reliable launching.","label":"I want a web app that is installable on desktops.","value":"progressive"},{"description":"Your desktop app can be accessed from desktop devices on all common web browsers.","label":"I want a web app that is designed specifically for desktop use.","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"condition":"HAS_DESIGN_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.hasBrandGuidelines","icon":"question","description":"","title":"Do you have required style/brand guidelines?","type":"radio-group","summaryTitle":"Brand Guidelines","validationError":"Please let us know if you have style/brand guildlines?","required":true,"help":{"linkTitle":"Where to Share Style & Branding Guidelines","title":"Where to Share Style & Branding Guidelines","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your style guide or branding guidelines inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificFonts","icon":"question","description":"","title":"Are there particular fonts you want used?","type":"radio-group","summaryTitle":"Specific Fonts","validationError":"Please let us know if you need particular fonts?","required":true,"help":{"linkTitle":"Where to Share Font Preferences","title":"Where to Share Font Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your font preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificColors","icon":"question","description":"","title":"Are there particular colors/themes you want used?","type":"radio-group","summaryTitle":"Specific Colors","validationError":"Please let us know if you need particular colors/theme?","required":true,"help":{"linkTitle":"Where to Share Color/Theme Preferences","title":"Where to Share Color/Theme Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your color/theme preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"design-deliverable-questions","type":"questions"},{"condition":"HAS_DEV_DELIVERABLE","hideTitle":false,"questions":[{"fieldName":"details.techstack.hasLanguagesPref","label":"Programming Languages","title":"","type":"checkbox","summaryTitle":"Languages Pref"},{"condition":"details.techstack.hasLanguagesPref == true","fieldName":"details.techstack.languages","title":"Let us know what programming languages you prefer.","type":"textbox","summaryTitle":"Languages"},{"fieldName":"details.techstack.hasFrameworksPref","label":"Frameworks","title":"","type":"checkbox","summaryTitle":"Frameworks Pref"},{"condition":"details.techstack.hasFrameworksPref == true","fieldName":"details.techstack.frameworks","title":"Let us know what frameworks you prefer.","type":"textbox","summaryTitle":"Frameworks"},{"fieldName":"details.techstack.hasDatabasePref","label":"Database","title":"","type":"checkbox","summaryTitle":"Database Pref"},{"condition":"details.techstack.hasDatabasePref == true","fieldName":"details.techstack.database","title":"Let us know what database you prefer.","type":"textbox","summaryTitle":"Database Pref"},{"fieldName":"details.techstack.hasServerPref","label":"Server","title":"","type":"checkbox","summaryTitle":"Database"},{"condition":"details.techstack.hasServerPref == true","fieldName":"details.techstack.server","title":"Let us know what server you prefer.","type":"textbox","summaryTitle":"Server"},{"fieldName":"details.techstack.hasHostingPref","label":"Hosting Environment","title":"","type":"checkbox","summaryTitle":"Hosting Pref"},{"condition":"details.techstack.hasHostingPref == true","fieldName":"details.techstack.hosting","title":"Let us know what hosting you prefer.","type":"textbox","summaryTitle":"Hosting Environments"},{"fieldName":"details.techstack.noPref","label":"No Preferences","title":"","type":"checkbox","summaryTitle":"No Preference"},{"fieldName":"details.techstack.sourceControl","title":"How do you manage source control?","type":"textbox","summaryTitle":"Source Control"}],"description":"","wizard":{"previousStepVisibility":"readOptimized"},"id":"dev-deliverable-questions","title":"Do you have technology stack preferences?","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"condition":"FALSY && !(CUSTOM_QUOTE)","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"!id","fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"},{"condition":"(CUSTOM_QUOTE)","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Topcoder will contact you shortly with a proposal on your project.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2},{"sectionIndex":4}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-09-13T13:31:28.000Z","updatedAt":"2020-04-21T15:12:36.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":4,"name":"Chatbot","key":"generic_chatbot","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

  • Interactive chatbot responding to voice, text and Alexa input
  • Configured for plain and contextual (nested) responses
  • One data source integration
"}]},"icon":"chatbot","question":"What do you need to develop?","info":"Voice, Text and Alexa capable chatbot deployed on an AWS stack.","aliases":["chatbot","generic_chatbot"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.capabilities","icon":"question","options":[{"label":"Order management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","title":"What capabilities does the chatbot need to support?","type":"checkbox-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.integrationSystems","icon":"question","description":"","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below.","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.existingAgentScripts","icon":"question","description":"","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later).","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.transferToHumanAgents","icon":"question","description":"","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.).","type":"textbox","required":true,"validationError":"Please complete this section"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Chatbot","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"Chatbot Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-13T07:37:57.000Z","updatedAt":"2020-04-21T15:12:36.792Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":210,"name":"Data Science Sprint","key":"ds_sprint","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

Demonstration of solution through:
  • Output data sets (machine learning)
  • Algorithmic code scores (optimization, prediction)
  • White papers from the Top 5 submissions to understand the techniques used to develop these results.
"}]},"icon":"data-science-sprint","question":"DS Sprints","info":"Quickly get answers, test assumptions, and iterate on existing code to improve data science outcomes.","aliases":["ds_sprint"," ds-sprint"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"5494","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"2334","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"3019","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"2674","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"4010","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"702","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Sprint"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsSprint.problemStatement","icon":"question","description":"","title":"Describe the problem you would like to solve or the concept you would like to explore.","type":"textbox","summaryTitle":"Problem Concept","required":true,"validationError":"Please, provide problem statement/concept for your project"},{"fieldName":"details.dsSprint.goals","icon":"question","description":"","title":"Expanding on your answer above, what are the one or two most important goals this project should achieve?","type":"textbox","summaryTitle":"Project Goals","required":true,"validationError":"Please, provide goals for your project"},{"fieldName":"details.dsSprint.problemDesc","icon":"question","description":"","title":"Provide a descriptive background of the problem.","type":"textbox","summaryTitle":"Problem Description","required":true,"validationError":"Please, provide descriptive background for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.academicPapers","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Are there academic papers or other sources that should be considered as inputs for your project?","type":"radio-group","summaryTitle":"Academic Papers"},{"condition":"(details.dsSprint.academicPapers == 'yes')","fieldName":"details.dsSprint.urls","icon":"question","description":"","theme":"light","title":"Please list URLs to academic papers or other sources. ","type":"textbox","summaryTitle":"Academic URLs","required":true,"validationError":"Please, provide URLs to your academic papers"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"academicPapers","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.preferredTech","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technologies that should be used for development?","type":"radio-group","summaryTitle":"Do you have Preferred Technology"},{"condition":"( details.dsSprint.preferredTech == 'yes')","fieldName":"details.dsSprint.preferredTechnologies","icon":"question","options":[{"label":"Python","value":"python"},{"label":"R and derivatives","value":"rDerivatives"},{"label":"Jupyter Notebook","value":"jupyter"},{"label":"Java","value":"java"},{"label":"C++","value":"cpp"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"Indicate your preferred technologies","type":"checkbox-group","summaryTitle":"Preferred Technology","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the preffered technologies","required":true},{"condition":"details.dsSprint.preferredTechnologies contains 'other'","fieldName":"details.dsSprint.techPlatforms","icon":"question","description":"","title":"Describe which technologies or platforms you’d like to use","type":"textbox","summaryTitle":"Other Technologies","validationError":"Please, provide technologies or platforms you’d like to use"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"preferredTechnology","type":"questions"},{"hideTitle":true,"questions":[{"condition":"!(details.dsSprint.preferredTechnologies hasLength 0)","fieldName":"details.dsSprint.selectedTechRequired","icon":"question","options":[{"description":"","label":"Required","value":"required"},{"description":"","label":"Optional","value":"optional"}],"description":"","theme":"light","title":"Are the selected technologies required, or optional?","type":"radio-group","summaryTitle":"Technologies Required/Optional ?"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"selectedTechRequired","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.openSourceLibraries","icon":"question","options":[{"description":"","label":"Open source is acceptable","value":"openSourceAcceptable"},{"description":"","label":"Open source is acceptable in general but I want to approve specific libraries","value":"openSourceSpecificLibraries"},{"description":"","label":"Open source is not acceptable","value":"openSourceUnacceptable"}],"description":"","theme":"light","title":"By default, Topcoder will employ open source libraries when the use of them improves outcome or speed.","type":"radio-group","summaryTitle":"Open Source","introduction":"Please indicate your preference for open source libraries."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"openSourceLibraries","type":"questions"},{"hideTitle":true,"questions":[{"minLabel":"See Many Concepts","fieldName":"details.dsSprint.outcome","max":100,"icon":"question","description":"","title":"What outcome is more important?","type":"slider-standard","summaryTitle":"Outcome","maxLabel":"See Best Implementations","required":true,"validationError":"Please provide expected hours of execution","min":1,"theme":"light","step":1,"introduction":"Topcoder’s deliverables can be adjusted to produce many concepts exploring possible solutions to a problem, or to produce focused proofs of concept based on a given technology stack or problem statement. Drag the tab below towards the most appropriate answer."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"outcome","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.dataAvailable","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have data that you can provide?","type":"radio-group","summaryTitle":"Data Available"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataFormat","icon":"question","description":"","title":"Describe the data’s format, size, and the steps you’ll need to take to share it.","type":"textbox","summaryTitle":"Data format & other details"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.pIIData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data contain PII?","type":"radio-group","summaryTitle":"PII Data"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataModifications","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data need to be further obfuscated or privatized","type":"radio-group","summaryTitle":"Data Obfuscated/Privatized"},{"condition":"(details.dsSprint.dataModifications == 'yes')","fieldName":"details.dsSprint.dataModificationsDesc","icon":"question","description":"","theme":"light","title":"Briefly describe the additional obfuscation/privatization required.","type":"textbox","summaryTitle":"Obfuscation/Privatization Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria for deciding winning options"},{"fieldName":"details.dsSprint.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Sprint","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-06-20T12:06:09.000Z","updatedAt":"2020-04-21T15:12:36.853Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":237,"name":"QA Max","key":"qa_max","category":"quality_assurance","subCategory":"quality_assurance","metadata":{},"icon":"qa_maxd","question":"qa_max","info":"qa_max","aliases":["qa_max"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Regression Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true},{"fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"fieldName":"description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Regression Testing","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-02-14T04:11:48.276Z","updatedAt":"2020-04-21T15:12:36.852Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":205,"name":"Computer Vision","key":"computer_vision","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"detailLink":"https://www.topcoder.com/case-studies/spacenet/","deliverables":[{"infoHTML":"

Expected Deliverables

  • Top 5 performing algorithms/models, each containerized for ease of use/security
  • Analysis and documentation for winning solutions
"}]},"icon":"computer-vision","question":"Computer Vision ","info":"Locate and classify patterns, object or building dimensions and actor behavior in still and video images.","aliases":["computer_vision"," computer-vision"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"295","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"3870","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"7329","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"9215","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"5309","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"7337","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description"},"theme":"light","validations":"isRequired","type":"textbox","title":"Describe the objectives of your Data Visualization project in 2-3 sentences.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Computer Vision"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.compVisDefinition.background","icon":"question","description":"","theme":"light","title":"Describe the background to the problem. What context would you like us to understand?","type":"textbox","summaryTitle":"Background","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.dataVariety","icon":"question","options":[{"label":"Overhead imagery (drones, satellites, etc)","value":"overhead-imagery"},{"label":"Video (GoPro, CCD, etc)","value":"video"},{"label":"Medical Images","value":"medical-images"},{"label":"Images of text","value":"images-of-text"},{"label":"General scenery (e.g. ImageNet or wildlife data)","value":"general-scenery"},{"label":"Other or Mixed Format (please describe it)","value":"other"}],"description":"","theme":"light","title":"What sort of data do you expect to provide? Check all that apply.","type":"checkbox-group","summaryTitle":"Data Type","validationError":"Please, select what sort of data do you expect to provide?","required":true},{"condition":"(details.compVisDefinition.dataVariety contains 'other')","fieldName":"details.compVisDefinition.otherDataVariety","icon":"question","description":"","theme":"light","title":"Please describe other types of data","type":"textbox","summaryTitle":"Other Data Types"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataType","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.solutionAim","icon":"question","options":[{"label":"Shape or object recognition & tracking","value":"shape-object-recognition"},{"label":"Optical Character Recognition","value":"optical-char-recognition"},{"label":"Building footprints","value":"building-footprints"},{"label":"Continuous paths (e.g. road networks)","value":"continuous-paths"},{"label":"3D reconstruction or robotics applications","value":"3d-reconstruction-or-robotics"},{"label":"Worker safety applications","value":"workder-safety-apps"},{"label":"Security applications","value":"security-apps"},{"label":"Face detection","value":"face-detection"},{"label":"Other (please describe it)","value":"other"}],"description":"","theme":"light","title":"What is the aim of the solution? Check all that apply.","type":"checkbox-group","summaryTitle":"Data Type","validationError":"Please, select what is the aim of the solution","required":true},{"condition":"(details.compVisDefinition.solutionAim contains 'other')","fieldName":"details.compVisDefinition.otherSolutionAims","icon":"question","description":"","theme":"light","title":"Please describe other aims of your solution","type":"textbox","summaryTitle":"Other Data Types"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"solutionAim","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.dataFormat","icon":"question","description":"","title":"Describe your data and explain the data format (.tiff, png, etc or other special conditions).","type":"textbox","summaryTitle":"Data Format"},{"fieldName":"details.compVisDefinition.dataSize","icon":"question","options":[{"description":"","label":"Less than 100MB","value":"less-than-100"},{"description":"","label":"100MB - 10GB","value":"100mb-10gb"},{"description":"","label":"10GB - 50GB","value":"10gb-50gb"},{"description":"","label":"More than 50GB","value":"more-than-50gb"},{"description":"","label":"More than 1TB","value":"more-than-1tb"}],"description":"","theme":"light","title":"Approximately how large is your data set?","type":"radio-group","summaryTitle":"Data Size","introduction":"Select the best fit from the options below:"},{"fieldName":"details.compVisDefinition.imagesCount","icon":"question","description":"","title":"Approximately how many images are in your data set?","type":"textbox","summaryTitle":"Images Count"},{"fieldName":"details.compVisDefinition.dataLocation","icon":"question","description":"","title":"Where is your data located? Please provide one or more URLs, if possible.","type":"textbox","summaryTitle":"Data Location"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.hasDataRestrictions","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Is your data licensed, or subject to any patent, export or treaty restrictions, or are there other roadblocks of which we should be aware?","type":"radio-group","summaryTitle":"Patent/Licenses"},{"condition":"(details.compVisDefinition.hasDataRestrictions == 'yes')","fieldName":"details.compVisDefinition.licenseRestrictions","icon":"question","description":"","theme":"light","title":"Please describe what are restrictions.","type":"textbox","summaryTitle":"Restrictions"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"licenseRestrictions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.expectedOutcomes","icon":"question","options":[{"description":"I want first-pass, proof-of-concept style results, which leverage insightfully-modified, open source packages that can be delivered in 2-4 weeks. I will review submissions and pick a winner.","label":"POC Style Results","value":"poc"},{"description":"I need best-in-class, research-grade outcomes. I am willing to accept a longer lead-time of 5-6 weeks, wherein real-time competition and objective scoring on a public leaderboard delivers maximum performance results.","label":"Research Grade Results","value":"research-grade"}],"description":"","theme":"light","title":"Which scenario best matches your needs and expected outcomes?","type":"radio-group","summaryTitle":"Expected Outcomes"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"outcomeDataDetails","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.compVisDefinition.expectedOutcomes == 'research-grade')","fieldName":"details.compVisDefinition.scoringSystems","icon":"question","options":[{"label":"Dice Coefficient","value":"dice-coefficient"},{"label":"Jaccard Index/Intersection Over Union","value":"jaccard-index-over-union"},{"label":"Classification Accuracy","value":"classification-accuracy"},{"label":"ROC/AUC","value":"roc-auc"},{"label":"F1 Score","value":"f1-score"},{"label":"Mean Squared Error","value":"mean-squared-error"},{"label":"Other (please describe it)","value":"other"}],"description":"","theme":"light","title":"Topcoder can support many types of scoring systems, simultaneously.","type":"checkbox-group","summaryTitle":"Scoring Systems","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the scoring system you need","required":true},{"condition":"(details.compVisDefinition.scoringSystems contains 'other')","fieldName":"details.compVisDefinition.otherScoringSystems","icon":"question","description":"","theme":"light","title":"Please describe the other scoring systems","type":"textbox","summaryTitle":"Other Platforms"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"scoringSystems","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.isDataLabeled","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Is any percent of your data labeled?","type":"radio-group","summaryTitle":"Is Data Labled"},{"condition":"(details.compVisDefinition.isDataLabeled == 'yes')","fieldName":"details.compVisDefinition.labeledPercent","icon":"question","description":"","theme":"light","title":"Please indicate the percent of labeled images.","type":"textbox","summaryTitle":"Labeled Percent"},{"condition":"(details.compVisDefinition.isDataLabeled == 'no')","fieldName":"details.compVisDefinition.isDataLabelingRequired","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Would you like Topcoder to help label your data?","type":"radio-group","summaryTitle":"Labeling Required"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataLabeling","type":"questions"},{"condition":"details.compVisDefinition.isDataLabelingRequired == 'no'","fieldName":"details.compVisDefinition.message","hideTitle":true,"description":"Topcoder challenges are scored algorithmically. In order to support your challenge, we will need to know how to measure good vs poor solutions. A Topcoder Challenge Architect will work with you to define scoring.","id":"customeQuote","title":"Message","type":"message"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.productionPrepRequired","icon":"question","options":[{"description":"","label":"Yes, I will need results fitted with a GUI, deployed as an API, etc. ","value":"yes"},{"description":"","label":"No, I will work with the command line results.","value":"no"}],"description":"","theme":"light","title":"Solutions are delivered as command line programs. Will you need your output to be further prepared for production use?","type":"radio-group","summaryTitle":"Need Production Prep"},{"condition":"(details.compVisDefinition.productionPrepRequired == 'yes')","fieldName":"details.compVisDefinition.productionRequirements","icon":"question","description":"","theme":"light","title":"Describe how you will interact with and deploy your results.","type":"textbox","summaryTitle":"Production Req"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"requirements","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.notes","icon":"question","description":"","theme":"light","title":"Please provide any additional notes/context you believe is important for us to know.","type":"textbox","summaryTitle":"Additional Context"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"condition":"details.compVisDefinition.productionPrepRequired == 'yes'","fieldName":"details.compVisDefinition.message","hideTitle":true,"description":"Topcoder will review your request and will respond with a custom quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Computer Vision","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-06-07T09:38:29.000Z","updatedAt":"2020-04-21T15:12:36.852Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":233,"name":"Regression Testing","key":"qa_regression","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

\n
  • Test case creation (if requested)
  • \n
  • Execution of test cases
  • \n
  • Validated defect log in Github or Gitlab
  • \n
  • Screenshots or videos of logged defects
  • \n
\n
"}]},"icon":"regression-testing","question":"What kind of quality assurance (QA) do you need?","info":"Validate business-critical workflows with structured testing.","aliases":["qa-regression","qa_regression"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Regression Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true},{"fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Regression Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-13T05:14:47.711Z","updatedAt":"2020-04-21T15:12:36.853Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":234,"name":"Mobile App Certification","key":"qa_mobile_app_certification","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"mobile-app-certification","question":"What kind of quality assurance (QA) do you need?","info":"Execute functional and non-functional tests including device compatibility certification and UX study.","aliases":["qa_mobile_app_certification","qa-mobile-app-certification"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Mobile App Certification"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing for mobile usability.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Include any additional information.","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Mobile App Certification","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-13T15:26:42.509Z","updatedAt":"2020-04-21T15:12:36.853Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":117,"name":"Subtitle","key":"subtitle","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ? 1","info":"Build apps for mobile, web, or wearables 123","aliases":["subtitle"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6739","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"496","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"8377","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4852","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"7596","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"8127","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"6598","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"4066","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"6177","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6938","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"882","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7657","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"1483","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9346","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9488","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6482","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2615","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3875","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"1965","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8179","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"5709","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"4754","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"2783","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4380","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9759","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1532","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"264","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"5892","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"8461","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9209","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8413","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5800","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"6460","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"8718","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"2180","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5643","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"843","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"9235","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"2824","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3875","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8139","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7947","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9649","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"7637","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"746","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"371","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"7361","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"690","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"9515","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7625","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"4936","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"4027","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4237","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"750","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"5251","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6153","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6440","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8948","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1201","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8390","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1167","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4727","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"6299","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"1389","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7355","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1442","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5379","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"693","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1180","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"901","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1016","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2883","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3351","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"658","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9743","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4451","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9080","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"181","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"326","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8666","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"7924","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"6427","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4358","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"1059","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4948","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6702","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"8054","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"5435","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"8781","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1007","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4237","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"1922","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5835","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"777","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6910","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3867","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"8142","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"3894","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6805","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"8400","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8498","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"8917","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3846","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"4512","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8044","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"9122","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"4286","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8882","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1296","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8212","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"3344","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"861","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2513","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8743","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"342","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"5380","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"3430","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2516","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7776","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"378","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3015","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"4561","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"667","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"5758","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"7137","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8961","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4530","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2135","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"886","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"4494","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3711","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"4513","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"2627","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"1413","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1104","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5252","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1973","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"5497","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9843","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6994","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":[{"isFrequent":true,"description":"Java 2 Enterprise Edition","categories":["design","dev-qa","qa"],"title":"J2EE","value":1},{"isFrequent":false,"description":"Java programming language","categories":["dev-qa"],"title":"Java","value":2},{"isFrequent":false,"description":"JavaBean","categories":["qa","deployment"],"title":"JavaBean","value":3},{"isFrequent":true,"description":"Enterprise Java Beans","categories":["deployment"],"title":"EJB","value":4},{"isFrequent":false,"description":"Java ServerPages","categories":["design","dev-qa","qa"],"title":"JSP","value":5},{"isFrequent":false,"description":"Java Servlet technology","categories":["dev-qa"],"title":"Servlet","value":6},{"isFrequent":true,"description":"Java Applets","categories":["qa","deployment"],"title":"Applet","value":7},{"isFrequent":false,"description":"Java Applications","categories":["deployment"],"title":"Java Application","value":8},{"isFrequent":false,"description":"Java Messaging Service","categories":["design","dev-qa","qa"],"title":"JMS","value":9},{"isFrequent":true,"description":"Web Services","categories":["dev-qa"],"title":"Web Services","value":10},{"isFrequent":false,"description":"Microsoft .NET Framework","categories":["qa","deployment"],"title":".NET","value":11},{"isFrequent":false,"description":"Microsoft Visual Basic programming language","categories":["deployment"],"title":"VB","value":12},{"isFrequent":true,"description":"C++ programming language","categories":["design","dev-qa","qa"],"title":"C++","value":13},{"isFrequent":false,"description":"Microsoft Component Object Model","categories":["dev-qa"],"title":"COM","value":14},{"isFrequent":false,"description":"Extensible Markup Language","categories":["qa","deployment"],"title":"XML","value":15},{"isFrequent":true,"description":"XML Style Sheets","categories":["deployment"],"title":"XSL","value":16},{"isFrequent":false,"description":"Hyper Text Markup Language","categories":["design","dev-qa","qa"],"title":"HTML","value":4202325},{"isFrequent":false,"description":"Hyper Text Transfer Protocol","categories":["dev-qa"],"title":"HTTP","value":4202326},{"isFrequent":true,"description":"Microsoft C# programming language","categories":["qa","deployment"],"title":"C#","value":5905414},{"isFrequent":false,"description":"Visual Basic .NET Programming Language","categories":["deployment"],"title":"VB.NET","value":7375010},{"isFrequent":false,"description":"JavaServer Faces","categories":["design","dev-qa","qa"],"title":"JSF","value":14999206},{"isFrequent":true,"description":"Java Mobile","categories":["dev-qa"],"title":"J2ME","value":15035679},{"isFrequent":false,"description":"MIDP 2.0","categories":["qa","deployment"],"title":"MIDP 2.0","value":15035680},{"isFrequent":false,"description":"XUL","categories":["deployment"],"title":"XUL","value":22839202},{"isFrequent":true,"description":"JavaScript","categories":["design","dev-qa","qa"],"title":"JavaScript","value":22839204},{"isFrequent":false,"description":"Microsoft IIS","categories":["dev-qa"],"title":"IIS","value":26740931},{"isFrequent":false,"description":"Oracle 10g","categories":["qa","deployment"],"title":"Oracle 10g","value":26740932},{"isFrequent":true,"description":"Oracle 9i","categories":["deployment"],"title":"Oracle 9i","value":26740933},{"isFrequent":false,"description":"SQL Server","categories":["design","dev-qa","qa"],"title":"SQL Server","value":26753737},{"isFrequent":false,"description":"COM+","categories":["dev-qa"],"title":"COM+","value":26783183},{"isFrequent":true,"description":"Windows Workflow Foundation","categories":["qa","deployment"],"title":"Windows Workflow Foundation","value":26854281},{"isFrequent":false,"description":"Windows Communication Foundation","categories":["deployment"],"title":"Windows Communication Foundation","value":26854283},{"isFrequent":false,"description":"XAML","categories":["design","dev-qa","qa"],"title":"XAML","value":26930935},{"isFrequent":true,"description":"Microsoft SilverLight","categories":["dev-qa"],"title":"Microsoft SilverLight","value":26930938},{"isFrequent":false,"description":"Spring","categories":["qa","deployment"],"title":"Spring","value":26951706},{"isFrequent":false,"description":"Dojo","categories":["deployment"],"title":"Dojo","value":26951708},{"isFrequent":true,"description":"AJAX","categories":["design","dev-qa","qa"],"title":"AJAX","value":26951709},{"isFrequent":false,"description":"Struts","categories":["dev-qa"],"title":"Struts","value":27004060},{"isFrequent":false,"description":"CSS","categories":["qa","deployment"],"title":"CSS","value":27004061},{"isFrequent":true,"description":"Windows Presentation Foundation","categories":["deployment"],"title":"WPF","value":27048250}],"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true,"skillsCategoriesField":"details.appDefinition.deliverables"},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-11T05:15:55.000Z","updatedAt":"2020-04-21T15:12:36.792Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":232,"name":"Subtitle 3","key":"subtitle3","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables tttt","aliases":["subtitle3"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9502","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6737","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"3977","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"918","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"8865","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"716","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"209","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"5829","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"157","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5287","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7620","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8686","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"1874","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1400","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1420","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3243","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1865","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3575","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"3461","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3569","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7538","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"455","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"9779","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4612","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6459","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1049","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5079","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"6979","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"3797","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"5331","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9586","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"984","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"8680","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"123","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"4541","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3778","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3501","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"1861","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"5781","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3550","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"923","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9211","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"275","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3550","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2065","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"3328","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"6349","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"10081","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"6301","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8348","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"8074","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1828","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3975","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7181","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"6991","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2597","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5820","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2508","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8185","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5742","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3782","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"232","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"2936","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"7695","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"977","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4244","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8002","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"875","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2271","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"940","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9905","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5644","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1711","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1626","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8622","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"7281","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7252","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3370","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7929","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3061","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1993","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2603","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8998","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"898","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7401","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"620","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"6919","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"5145","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"5289","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7833","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"631","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"8747","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4961","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"883","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4181","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2750","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"7624","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7257","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4310","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4808","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"270","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"2313","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9783","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"9746","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5769","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"7564","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"1841","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9604","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7977","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"127","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"7147","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1529","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6706","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"879","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"2492","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"9877","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"7599","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3408","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"5015","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4397","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2466","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"5303","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6022","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"8187","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"2934","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9104","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7584","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"6575","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2354","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"1917","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9746","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"8418","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"6427","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"5833","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3231","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5866","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3111","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"2711","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1761","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"4425","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":[{"isFrequent":true,"description":"Java 2 Enterprise Edition","categories":["design","dev-qa","qa"],"title":"J2EE","value":1},{"isFrequent":false,"description":"Java programming language","categories":["dev-qa"],"title":"Java","value":2},{"isFrequent":false,"description":"JavaBean","categories":["qa","deployment"],"title":"JavaBean","value":3},{"isFrequent":true,"description":"Enterprise Java Beans","categories":["deployment"],"title":"EJB","value":4},{"isFrequent":false,"description":"Java ServerPages","categories":["design","dev-qa","qa"],"title":"JSP","value":5},{"isFrequent":false,"description":"Java Servlet technology","categories":["dev-qa"],"title":"Servlet","value":6},{"isFrequent":true,"description":"Java Applets","categories":["qa","deployment"],"title":"Applet","value":7},{"isFrequent":false,"description":"Java Applications","categories":["deployment"],"title":"Java Application","value":8},{"isFrequent":false,"description":"Java Messaging Service","categories":["design","dev-qa","qa"],"title":"JMS","value":9},{"isFrequent":true,"description":"Web Services","categories":["dev-qa"],"title":"Web Services","value":10},{"isFrequent":false,"description":"Microsoft .NET Framework","categories":["qa","deployment"],"title":".NET","value":11},{"isFrequent":false,"description":"Microsoft Visual Basic programming language","categories":["deployment"],"title":"VB","value":12},{"isFrequent":true,"description":"C++ programming language","categories":["design","dev-qa","qa"],"title":"C++","value":13},{"isFrequent":false,"description":"Microsoft Component Object Model","categories":["dev-qa"],"title":"COM","value":14},{"isFrequent":false,"description":"Extensible Markup Language","categories":["qa","deployment"],"title":"XML","value":15},{"isFrequent":true,"description":"XML Style Sheets","categories":["deployment"],"title":"XSL","value":16},{"isFrequent":false,"description":"Hyper Text Markup Language","categories":["design","dev-qa","qa"],"title":"HTML","value":4202325},{"isFrequent":false,"description":"Hyper Text Transfer Protocol","categories":["dev-qa"],"title":"HTTP","value":4202326},{"isFrequent":true,"description":"Microsoft C# programming language","categories":["qa","deployment"],"title":"C#","value":5905414},{"isFrequent":false,"description":"Visual Basic .NET Programming Language","categories":["deployment"],"title":"VB.NET","value":7375010},{"isFrequent":false,"description":"JavaServer Faces","categories":["design","dev-qa","qa"],"title":"JSF","value":14999206},{"isFrequent":true,"description":"Java Mobile","categories":["dev-qa"],"title":"J2ME","value":15035679},{"isFrequent":false,"description":"MIDP 2.0","categories":["qa","deployment"],"title":"MIDP 2.0","value":15035680},{"isFrequent":false,"description":"XUL","categories":["deployment"],"title":"XUL","value":22839202},{"isFrequent":true,"description":"JavaScript","categories":["design","dev-qa","qa"],"title":"JavaScript","value":22839204},{"isFrequent":false,"description":"Microsoft IIS","categories":["dev-qa"],"title":"IIS","value":26740931},{"isFrequent":false,"description":"Oracle 10g","categories":["qa","deployment"],"title":"Oracle 10g","value":26740932},{"isFrequent":true,"description":"Oracle 9i","categories":["deployment"],"title":"Oracle 9i","value":26740933},{"isFrequent":false,"description":"SQL Server","categories":["design","dev-qa","qa"],"title":"SQL Server","value":26753737},{"isFrequent":false,"description":"COM+","categories":["dev-qa"],"title":"COM+","value":26783183},{"isFrequent":true,"description":"Windows Workflow Foundation","categories":["qa","deployment"],"title":"Windows Workflow Foundation","value":26854281},{"isFrequent":false,"description":"Windows Communication Foundation","categories":["deployment"],"title":"Windows Communication Foundation","value":26854283},{"isFrequent":false,"description":"XAML","categories":["design","dev-qa","qa"],"title":"XAML","value":26930935},{"isFrequent":true,"description":"Microsoft SilverLight","categories":["dev-qa"],"title":"Microsoft SilverLight","value":26930938},{"isFrequent":false,"description":"Spring","categories":["qa","deployment"],"title":"Spring","value":26951706},{"isFrequent":false,"description":"Dojo","categories":["deployment"],"title":"Dojo","value":26951708},{"isFrequent":true,"description":"AJAX","categories":["design","dev-qa","qa"],"title":"AJAX","value":26951709},{"isFrequent":false,"description":"Struts","categories":["dev-qa"],"title":"Struts","value":27004060},{"isFrequent":false,"description":"CSS","categories":["qa","deployment"],"title":"CSS","value":27004061},{"isFrequent":true,"description":"Windows Presentation Foundation","categories":["deployment"],"title":"WPF","value":27048250}],"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true,"skillsCategoriesField":"details.appDefinition.deliverables"},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-01-22T09:08:05.270Z","updatedAt":"2020-04-21T15:12:36.854Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"ProductTemplate":[{"id":166,"name":"Code","productKey":"challenge-CODE","category":"api_and_integrations","subCategory":"challenge","icon":"challenge-CODE","brief":"Code","details":"Code","aliases":["challenge-code"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:01:30.000Z","updatedAt":"2020-04-21T15:12:37.257Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":26,"name":"Design Iteration (long)","productKey":"design-iteration-3-milestones","category":"design","subCategory":"visual_design","icon":"product-design-app-visual","brief":"3 Milestones","details":"Design work with checkpoint and final review","aliases":["design-iteration-3-milestones","design_iteration_3_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Design Iteration (3 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-08T14:56:42.000Z","updatedAt":"2020-04-21T15:12:37.279Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":58,"name":"Dev/QA add-on 1","productKey":"generic-dev-qa-add-on-1","category":"generic","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-dev-qa-add-on-1"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:42.000Z","updatedAt":"2020-04-21T15:12:37.278Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":25,"name":"Design Iteration (short)","productKey":"design-iteration-2-milestones","category":"design","subCategory":"visual_design","icon":"product-design-app-visual","brief":"2 Milestones","details":"Design work with final review","aliases":["design-iteration-2-milestones","design_iteration_2_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Design Iteration (2 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-08T14:50:21.000Z","updatedAt":"2020-04-21T15:12:37.279Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":21,"name":"Development Integration","productKey":"generic_dev","category":"generic","subCategory":"generic","icon":"../../assets/icons/product-dev-other.svg","brief":"Development Integration","details":"Get help with any part of your app or software","aliases":["generic-development","generic_dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","hidden":true,"icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","hidden":true,"icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","hidden":true,"icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","hidden":true,"icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Integration","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-22T05:44:45.000Z","updatedAt":"2020-04-21T15:12:37.278Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":31,"name":"RUX Iteration","productKey":"rux-iteration","category":"design","subCategory":"visual_design","icon":"product-design-other","brief":"RUX Iteration","details":"RUX Iteration","aliases":["rux-iteration","rux_iteration"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"RUX Iteration","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-10T12:07:59.000Z","updatedAt":"2020-04-21T15:12:37.280Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":29,"name":"Development Iteration (5 Milestones)","productKey":"development-iteration-5-milestones","category":"test-product-category","subCategory":"test13","icon":"product-dev-other.svg","brief":"5 Milestones","details":"Development iteration with 5 milestones","aliases":["development-iteration-5-milestones","development_iteration_5_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Iteration (5 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-09T12:30:38.000Z","updatedAt":"2020-04-21T15:12:37.281Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":19,"name":"Front-end","productKey":"frontend_dev","category":"test-product-category","subCategory":"test-product","icon":"../../assets/icons/product-dev-front-end-dev.svg","brief":"Front end development","details":"Translate your designs into Web or Mobile front-end","aliases":["frontend-development","frontend_dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Front-end","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-21T12:27:49.000Z","updatedAt":"2020-04-21T15:12:37.280Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":56,"name":"Zepplin app handoff","productKey":"generic-design-add-on-2","category":"generic","subCategory":"copydesign","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-design-add-on-2"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:16.000Z","updatedAt":"2020-04-21T15:12:37.279Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":168,"name":"Web Design","productKey":"challenge-WEB_DESIGNS","category":"design","subCategory":"challenge","icon":"challenge-WEB_DESIGNS","brief":"Web Design","details":"Web Design","aliases":["challenge-web_designs"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:03:29.000Z","updatedAt":"2020-04-21T15:12:37.278Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":24,"name":"Salesforce Accelerator","productKey":"sfdc_testing","category":"generic","subCategory":"generic","icon":"product-qa-sfdc-accelerator","brief":"TBD","details":"SalesForce Testing, Cross browser-device Testing","aliases":["sfdc_testing","sfdc-testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief description of your project, Salesforce.com implementation testing objectives","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.components","hidden":true,"icon":"question","options":[{"label":"Manual Test packs + Business Models + Automation scripts","value":"pack_one"},{"label":"License for AssureNXT and Tosca for 2 months","value":"pack_two"},{"label":"Customization services to fit the pre-built assets to your specific use cases","value":"pack_three"}],"description":"Full solution will have all the above components, while Partial solution - can have just either the sfdc assets mentioned in option 1 OR SFDC assets + customized service without the license","type":"checkbox-group","title":"The Salesforce.com accelerator pack comprises of pre-built test assets and tools/licenses support to enable customization services. Would you like to purchase all the components of the accelerator pack or only a subset of it? (choose all that apply)","required":true,"validationError":"Please provide the required options"},{"fieldName":"details.appDefinition.functionalities","hidden":true,"icon":"question","options":[{"label":"Sales Cloud - Campaign","value":"sales_cloud_campaign"},{"label":"Lead","value":"lead"},{"label":"Account","value":"account"},{"label":"Contact","value":"contact"},{"label":"Opportunity","value":"opportunity"},{"label":"Quote","value":"quote"},{"label":"Contract & Order Management","value":"contract_and_order"},{"label":"Product & Price Book and End to End Processes & Misc Functions (Activites Chatter Reports & Dashboards)","value":"product_price"},{"label":"Service Cloud – Case Management","value":"service_cloud_case_management"}],"description":"","type":"checkbox-group","title":"Select the functionalities which are applicable for your Salesforce.com Implementation ( 1 or multiple from the 10 listed below)"},{"fieldName":"details.appDefinition.lightningExperience.value","hidden":true,"icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"I Don't Know","value":"Neither"}],"description":"","type":"radio-group","title":"Are you using the Lightning Experience?","required":true}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information such as any existing test automation tool used, known constraints for automation, % of customizations in your Salesforce.com implementation, etc.","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. *AssureNXT - Rapid Test Design Module is a Component of AssureNXT which is a Test Management Platform. It helps in Automated Test Case and Test Data Model generation through business process diagrams. RTD establishes direct relationship between business requirements, process flows and test coverage. Accelerated Test Case generation for changed business process. *Tosca - Tricentis Tosca is a testing tool that is used to automate end-to-end testing for software applications. Tricentis Tosca combines multiple aspects of software testing (test case design, test automation, test data design and generation, and analytics) to test GUIs and APIs from a business perspective","id":"appDefinition","title":"Salesforce Accelerator","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-07-06T07:37:46.000Z","updatedAt":"2020-04-21T15:12:37.312Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":12,"name":"Computer Vision","productKey":"computer_vision","category":"generic","subCategory":"generic","icon":"product-qa-crowd-testing","brief":"TBD","details":"Work with images to recognize patterns, compute correspondences, etc","aliases":["computer-vision","computer_vision"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief Description of your objectives","validationErrors":{"isRequired":"Please provide your objectives","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Objectives"},{"fieldName":"details.vision.groundtruth","hidden":true,"icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","type":"radio-group","title":"Do you have ground truth defined?","required":true,"validationError":"Please select one"},{"fieldName":"details.vision.groundtruthDesc","hidden":true,"icon":"question","description":"(if applicable)","type":"textbox","title":"Describe your ground truth?","required":true,"validationError":"Please tell us about your ground truth"},{"fieldName":"details.vision.dataDesc","hidden":true,"icon":"question","description":"(if applicable)","type":"textbox","title":"Describe your data set","required":true,"validationError":"Please tell us about your data set"},{"fieldName":"details.vision.datasetSize","hidden":true,"icon":"question","description":"","type":"textbox","title":"Approximately how large is your data set in MB, GB, TB?","required":true,"validationError":"Please tell us the size of your data set"},{"fieldName":"details.vision.imageSet","hidden":true,"icon":"question","description":"","type":"textbox","title":"Approximately how many images are in your data set?","required":true,"validationError":"Please tell us roughly the number of images in your set"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please detail any other additional information","id":"notes","type":"notes","title":"Additional Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Computer Vision","required":true},{"subSections":[{"questions":[{"fieldName":"details.dataURL","icon":"question","description":"","type":"textbox","title":"Please provide a URL to your data"},{"fieldName":"details.performanceInfo","icon":"question","description":"","type":"textbox","title":"Please describe the performance of your existing software"},{"fieldName":"details.externalDataUsage","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"Unsure","value":"Unsure"}],"description":"","type":"radio-group","title":"Do you anticipate allowing contestants to use external data?"},{"fieldName":"details.externalDataUsage","icon":"question","options":[{"label":"F1/Dice","value":"F1/Dice"},{"label":"Jaccard Index","value":"Jaccard Index"},{"label":"Harmonic Mean","value":"Harmonic Mean"}],"description":"","type":"checkbox-group","title":"If you have already thought of a scoring method, please indicate them here"},{"fieldName":"details.otherScoringInfo","icon":"question","description":"","type":"textbox","title":"If scoring method was other, please provide your approach"}],"description":"","id":"additional","type":"questions","title":"Additional Questions","required":false}],"description":"Please complete these optional questions.","id":"optionals","title":"Additional Questions","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T15:31:38.000Z","updatedAt":"2020-04-21T15:12:37.280Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":76,"name":"Backend Development","productKey":"backend-development","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Backend Development","details":"Commonly used to develop the backend of existing applications to support front-end enhancements.","aliases":["backend-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:08:02.000Z","updatedAt":"2020-04-21T15:12:37.366Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":30,"name":"QA Iteration","productKey":"qa-iteration","category":"qa","subCategory":"quality_assurance","icon":"product-qa-crowd-testing","brief":"QA phase","details":"QA iteration","aliases":["qa-iteration","qa_iteration"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"QA Iteration","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-10T12:06:26.000Z","updatedAt":"2020-04-21T15:12:37.279Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":23,"name":"Performance Testing","productKey":"performance_testing","category":"generic","subCategory":"generic","icon":"product-qa-website-performance","brief":"Performance Testing","details":"Webpage rendering effiency, Load, Stress and Endurance Test","aliases":["performance-testing","performance_testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hidden":true,"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"In 160 or more characters tell us what is the app, main functions, problem area, etc..","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Please provide brief description of the system and/or application you would like to execute Performance Testing on."},{"fieldName":"details.loadDetails.concurrentUsersCount","hidden":true,"icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","type":"slide-radiogroup","title":"What is the desired load on the system in terms of concurrent users for this test?","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","hidden":true,"icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","type":"slide-radiogroup","title":"Approximately how many business processes/transactions will be included in your Performance Test?","required":true,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","hidden":true,"icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","type":"slide-radiogroup","title":"How many hours do you expect the Performance Test to be executed for?","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.testingNeeds.addons","icon":"question","options":[{"label":"Scenario Booster add 3 more","value":"scenario"},{"label":"Add 250 vUsers","value":"250vusers"},{"label":"Add 2500 vUsers","value":"2500vusers"},{"label":"Add additional Geography","value":"geo"},{"label":"Precurser to purchase - 1 Tool, 2 scripts,1 hour execution","value":"poc"},{"label":"Utilize consultant to tailor strategy","value":"strategy"},{"label":"Execution Booster extra 2 hours","value":"execution"},{"label":"Use my own testing tool","value":"mytool"},{"label":"Modify/Use own scripts","value":"myscripts"},{"label":"Late Entry - 1 week lead time","value":"late"}],"description":"","type":"checkbox-group","title":"Please select any additional add-ons.","required":false}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document—add a link in the notes section or upload it below.","id":"appDefinition","title":"Performance Testing","required":true},{"subSections":[{"questions":[{"fieldName":"details.spoc.business.name","icon":"question","description":"","type":"textbox","title":"Name of the Business SPOC","validationError":"Please provide name of business SPOC"},{"fieldName":"details.spoc.business.email","icon":"question","description":"","validationErrors":{"isEmail":"Please enter a valid email"},"validations":"isEmail","type":"textbox","title":"Email of the Business SPOC"},{"fieldName":"details.spoc.testing.name","icon":"question","description":"","type":"textbox","title":"Name of the Testing SPOC","validationError":"Please provide name of testing SPOC"},{"fieldName":"details.spoc.testing.email","icon":"question","description":"","validationErrors":{"isEmail":"Please enter a valid email"},"validations":"isEmail","type":"textbox","title":"Email of the Testing SPOC"},{"fieldName":"details.spoc.dev.name","icon":"question","description":"","type":"textbox","title":"Name of the development SPOC","validationError":"Please provide name of development SPOC"},{"fieldName":"details.spoc.dev.email","icon":"question","description":"","validationErrors":{"isEmail":"Please enter a valid email"},"validations":"isEmail","type":"textbox","title":"Email of the development SPOC"}],"description":"","id":"spoc","type":"questions","title":"SPOCs (Single Point of Contact)","required":false}],"description":"Please provide information on specific points of contacts.","id":"pocs","title":"Points of Contacts","required":false},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.targetApplication.architecture","description":"","id":"architecture","type":"textbox","title":"Briefly describe the architecture of the system. Please attach any architecture diagrams, design documents, and non-functional requirements in the Files section of this page."},{"fieldName":"details.targetApplication.developmentPlatform","icon":"question","options":[{"label":".NET","value":"dotnet"},{"label":"J2EE","value":"j2ee"},{"label":"Rich Internet Applications","value":"ria"},{"label":"Oracle Technology","value":"oracle"},{"label":"SAP","value":"sap"},{"label":"Mainframe","value":"mainframe"},{"label":"Adobe Flex","value":"adobe-flex"},{"label":"Others","value":"others"}],"description":"","id":"developmentPlatform","type":"checkbox-group","title":"What is the application development platform?"},{"fieldName":"details.targetApplication.frontEnd","icon":"question","options":[{"label":"Web Browser - Thin Client","value":"web-browser"},{"label":"Desktop App (Executable) - Thick Client","value":"desktop-app"},{"label":"Citrix based Desktop App (Executable)","value":"citrix"},{"label":"Java based (with Swing/Applets)","value":"java"},{"label":"Web based Oracle Forms","value":"oracle-forms"},{"label":"Any other","value":"other"}],"description":"","id":"frontEnd","type":"checkbox-group","title":"What is the front end of the system?"},{"fieldName":"details.targetApplication.webBrowsers","icon":"question","description":"(For eg. Webserver can be Apache, IIS etc.)","type":"textbox","title":"If applicable what web servers are used?"},{"fieldName":"details.targetApplication.appServers","icon":"question","description":"(For eg. Application server can be JBoss or Weblogic or Websphere etc.)","type":"textbox","title":"If applicable what application servers are used?"},{"fieldName":"details.targetApplication.backEnd","icon":"question","description":"(For eg. Back end can be Oracle, MS SQL or Sybase etc)","type":"textbox","title":"What data store technology is used?"},{"fieldName":"details.targetApplication.legacyBackEnd","icon":"question","description":"Mainframe(S390), AS400, Others","type":"textbox","title":"If the back end is a legacy system then specify the below"},{"fieldName":"details.targetApplication.middleware","icon":"question","description":"(For eg. Middleware can be MQSeries or TIBCO or Webmethod etc)","type":"textbox","title":"What middleware is used, if any?"},{"fieldName":"details.targetApplication.webservices","icon":"question","description":"(For eg. SOAP/REST Webservices deployed in App server for new customer creation and maintenance)","type":"textbox","title":"If your system uses web services, what architecture do they use? What functions do your web services perform?"},{"fieldName":"details.targetApplication.authMode","icon":"question","options":[{"label":"NTLM","value":"ntlm"},{"label":"Siteminder/SSO","value":"sso"},{"label":"LDAP","value":"ldap"},{"label":"Others","value":"others"}],"description":"","id":"targetApplication.authMode","type":"checkbox-group","title":"What is the authentication mode used by the application?"},{"fieldName":"details.targetApplication.interfaces","icon":"question","options":[{"label":"Vendor System","value":"vendor-system"},{"label":"Document Mgmt System","value":"document-mgmt-system"},{"label":"Payments","value":"payments"},{"label":"Others","value":"other"}],"description":"","id":"targetApplication.interfaces","type":"checkbox-group","title":"What interfaces does the application have?"}],"description":"","id":"questions","type":"questions","title":"Questions"}],"description":"Please provide the overview of the system to be tested","id":"systemOverview","title":"System Overview","required":false},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.perfTestEnv.missingCompSimulators","icon":"question","description":"","type":"textbox","title":"Are the simulators/stubs available in test environment for the components available and if so do they support concurrent request simulation?"},{"fieldName":"details.perfTestEnv.thirdPartyStubs","icon":"question","description":"","type":"textbox","title":"Will online interfaces/stubs for the payment systems, vendor systems etc. be available for performance testing?"},{"fieldName":"details.perfTestEnv.testDataAvailability","icon":"question","description":"","type":"textbox","title":"Please provide details on test data availability - A) Resident or master test data in DB e.g. Customers, products, locations etc. B) User specific data e.g. User Ids, email, credit card, order number etc. Who will support creating/importing/masking test data?"},{"fieldName":"details.perfTestEnv.soa","icon":"question","description":"","type":"textbox","title":"Please let us know if SOA based services need to be performance tested in a stand alone manner. If yes, please provide relevant details"},{"fieldName":"details.perfTestEnv.hostedOn","icon":"question","options":[{"label":"Physical servers","value":"physical-servers"},{"label":"Virtual/Cloud infrastructure","value":"cloud"}],"description":"Are the applications hosted on physical servers or virtual/cloud infrastructure","type":"radio-group","title":"Where are applications hosted?"},{"fieldName":"details.perfTestEnv.tools","icon":"question","description":"","type":"textbox","title":"Are performance testing tools available within your organization? (e.g. HP Loadrunner, Performance Center, Jmeter) If yes, has a PoC been conducted to validate the compatibility of these tools with the application to be tested? Will these be tools be made available in with required license for this performance test?"},{"fieldName":"details.perfTestEnv.diagnosticTools","icon":"question","description":"","type":"textbox","title":"Are performance diagnostic tools available within your organization? (e.g. Dynatrace, Yourkit, Profiler) If yes, has a PoC been conducted to validate compatibility ofthese tools with the applicationto be tested? Will these be tools be made available in with required license for this performance test?"},{"fieldName":"details.perfTestEnv.monitoring","icon":"question","description":"","type":"textbox","title":"How is application performance being monitored or planned to be monitored in production. Are same tools available in testing environment?"},{"fieldName":"details.perfTestEnv.saasAllowPortsOpening","icon":"question","description":"","type":"textbox","title":"In case of cloud based or SaaS performance testing tools, will your organization open necessary ports in any firewalls required to inject load on the application in a test environment?"}],"description":"","id":"perfTestEnvSec","type":"questions","title":"Questions"}],"description":"Please provide information on test environments.","id":"perfTestEnv","title":"Performance Test Environment"},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.prevDetails.time","icon":"question","description":"","type":"textbox","title":"When was the last time performance test carried out? On which version of application code base?"},{"fieldName":"details.prevDetails.reports","icon":"question","description":"","type":"textbox","title":"Please share the previous performance test reports if available by pasting here, or attaching in the Files section."},{"fieldName":"details.prevDetails.changes","icon":"question","description":"","type":"textbox","title":"What are the changes in application, architecture, infrastructure since the last test?"},{"fieldName":"details.prevDetails.typesOfTests","icon":"question","description":"","type":"textbox","title":"What different types of tests were carried out and which measurements were captured?"},{"fieldName":"details.prevDetails.monitoringTools","icon":"question","description":"","type":"textbox","title":"What were the performance testing and performance monitoring tools used?"},{"fieldName":"details.prevDetails.testScripts","icon":"question","description":"","type":"textbox","title":"Are the performance test scenarios and automated test scripts previously used still available?"},{"fieldName":"details.prevDetails.issues","icon":"question","description":"","type":"textbox","title":"Are there any open performance issues from previous tests?"},{"fieldName":"details.prevDetails.fixedIssues","icon":"question","description":"","type":"textbox","title":"Please detail any issues previously identified and resolved from previous performance tests."}],"description":"","id":"prevDetails","type":"questions","title":"Questions"}],"description":"Please provide information on specific points of contacts.","id":"previousDetails","title":"Previous Performance Test Details"}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-07-06T07:32:52.000Z","updatedAt":"2020-04-21T15:12:37.277Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":94,"name":"API Integration","productKey":"api-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"API Integration","details":"Integrate an API to your application.","aliases":["api-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-05T10:39:20.000Z","updatedAt":"2020-04-21T15:12:37.367Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":92,"name":"Unit Tests","productKey":"unit-tests","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"Unit Tests","details":"Unit Tests","aliases":["unit-tests"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:27:13.000Z","updatedAt":"2020-04-21T15:12:37.366Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":15,"name":"Visual Design","productKey":"visual_design_prod","category":"generic","subCategory":"generic","icon":"product-design-app-visual","brief":"1-15 screens","details":"Create development-ready designs","aliases":["visual-design","visual_design_prod"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","hidden":true,"affectsQuickQuote":true,"icon":"question","options":[{"iconOptions":{"number":"1-3"},"minTimeUp":0,"icon":"NumberText","title":"screens","value":"1-3","quoteUp":0,"maxTimeUp":0,"desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"minTimeUp":3,"icon":"NumberText","title":"screens","value":"4-8","quoteUp":2000,"maxTimeUp":5,"desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"minTimeUp":8,"icon":"NumberText","title":"screens","value":"9-15","quoteUp":3500,"maxTimeUp":12,"desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","type":"tiled-radio-group","title":"How many screens do you need designed?"},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"icon":"question","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Visual Design","required":true},{"subSections":[{"fieldName":"details.appScreens.screens","hideTitle":true,"questions":[{"fieldName":"name","icon":"question","description":"Describe your objectives for creating this application","validations":"isRequired","type":"textinput","title":"Screen name","required":true,"validationError":"Screen name cannot be blank"},{"fieldName":"description","icon":"question","description":"What are the important features/capabilities that the screen provides to your end users?","validations":"isRequired","type":"textbox","title":"What are the things the user can do on this screen?","required":true,"validationError":"Answer cannot be blank"},{"fieldName":"importanceLevel","icon":"question","options":[{"title":"1","value":1},{"title":"2","value":2},{"title":"3","value":3},{"title":"4","value":4},{"title":"5","value":5},{"title":"6","value":6},{"title":"7","value":7},{"title":"8","value":8},{"title":"9","value":9},{"title":"10","value":10}],"description":"Pick how important is this screen for your project from 1 to 10","type":"select-dropdown","title":"Screen importance","required":true}],"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"screens","type":"screens","title":"Screens","required":true}],"description":"Please describe all the primary screens first. It is important to think about the biggest problem of your application, rather than list all possible screens. Well documented and researched design patterns like \"Settings\", \"Search\", \"Listing\", \"Log In\", \"Registration\" do not need to be the focus of the design, unless you're doing something transformative with said screens. In that case please list in details what is the novel approach for your screens.","id":"appScreens","title":"App Screens","required":true},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.designSpecification.guidelines","description":"Do you have brand guidelines that need to be followed? If yes, please include a link or attach them in the definition section, above.","id":"guidelines","type":"textbox","title":"Guidelines"},{"fieldName":"details.designSpecification.examples","description":"Are there any apps or sites that have a look and feel that you would want used as inspiration? Please provide links or examples.","id":"examples","type":"textbox","title":"Examples"},{"fieldName":"details.designSpecification.excludeExamples","description":"On the other hand, are there any apps or sites that you dislike? Please provide links or examples.","id":"excludeExamples","type":"textbox","title":"Exclude Examples"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Guidelines","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-06-02T15:44:40.000Z","updatedAt":"2020-04-21T15:12:37.314Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":170,"name":"Wireframes","productKey":"challenge-WIREFRAMES","category":"design","subCategory":"challenge","icon":"challenge-WIREFRAMES","brief":"Wireframes","details":"Wireframes","aliases":["challenge-wireframes"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:06:31.000Z","updatedAt":"2020-04-21T15:12:37.278Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":73,"name":"Offline Capability","productKey":"offline-capability","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Offline Capability","details":"Enable users to use your application features offline and persist data locally so it can be synced with the server periodically.","aliases":["offline-capability"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:05:05.000Z","updatedAt":"2020-04-21T15:12:37.306Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":10,"name":"Watson Chatbot","productKey":"watson_chatbot","category":"generic","subCategory":"generic","icon":"product-chatbot-watson","brief":"Watson Chatbot","details":"Build Chatbot using IBM Watson","aliases":["watson_chatbot","watson-chatbot"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.hasBluemixAccount","hidden":true,"icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","type":"radio-group","title":"Do you have an existing IBM Cloud (formerly IBM Bluemix) account?","required":true},{"fieldName":"details.appDefinition.hasChatbot","hidden":true,"icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","type":"radio-group","title":"Does your organization currently have a chatbot?","required":true},{"fieldName":"details.appDefinition.existingChatbotDesc","hidden":true,"icon":"question","description":"","type":"textbox","title":"If yes, can you provide some brief specifics about your current chatbot?"},{"fieldName":"details.appDefinition.capabilities","hidden":true,"icon":"question","options":[{"label":"Order Management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account Management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","type":"checkbox-group","title":"What capabilities does the chatbot need to support?"},{"fieldName":"details.appDefinition.integrationSystems","hidden":true,"icon":"question","description":"","type":"textbox","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below."},{"fieldName":"details.appDefinition.existingAgentScripts","hidden":true,"icon":"question","description":"","type":"textbox","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later)."},{"fieldName":"details.appDefinition.transferToHumanAgents","hidden":true,"icon":"question","description":"","type":"textbox","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.)."}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Watson Chatbot","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T15:26:29.000Z","updatedAt":"2020-04-21T15:12:37.305Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":169,"name":"Design First to Finish","productKey":"challenge-DESIGN_FIRST_2_FINISH","category":"design","subCategory":"challenge","icon":"challenge-DESIGN_FIRST_2_FINISH","brief":"Design First to Finish","details":"Design First to Finish","aliases":["challenge-design_first_2_finish"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:04:57.000Z","updatedAt":"2020-04-21T15:12:37.306Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":86,"name":"Mobile Enterprise Security Iteration","productKey":"mobile-enterprise-security","category":"development","subCategory":"security","icon":"../../assets/icons/product-dev-integration.svg","brief":"Mobile Enterprise Security Iteration","details":"Encrypt data on device and server, be able to remotely wipe a device cache, prevent decompiling of source code, etc. Requirements per project need to be specified.","aliases":["mobile-enterprise-security"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:16:48.000Z","updatedAt":"2020-04-21T15:12:37.305Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":63,"name":"Dev/QA add-on 4 (non-generic)","productKey":"gtest-dev-qa-add-on-4","category":"test-product-category","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["gtest-dev-qa-add-on-4"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":true,"createdAt":"2019-01-23T09:26:14.000Z","updatedAt":"2020-04-21T15:12:37.307Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":171,"name":"Test Suites","productKey":"challenge-TEST_SUITES","category":"test-product-category","subCategory":"challenge","icon":"challenge-TEST_SUITES","brief":"Test Suites","details":"Test Suites","aliases":["challenge-test_suites"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:07:45.000Z","updatedAt":"2020-04-21T15:12:37.307Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":28,"name":"Development Iteration (4 Milestones)","productKey":"development-iteration-4-milestones","category":"development","subCategory":"app_dev","icon":"product-dev-other.svg","brief":"4 Milestones","details":"Development iteration with 4 milestones","aliases":["development-iteration-4-milestones","development_iteration_4_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Iteration (4 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-08-09T12:30:14.000Z","updatedAt":"2020-04-21T15:12:37.308Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":70,"name":"Responsive UI Prototype","productKey":"responsive-ui-prototype","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"Responsive UI Prototype","details":"Create a responsive HTML, CSS, and JavaScript UI prototype for your application that will render on desktops, tablets and mobile devices prior to creating production-ready designs to validate current requirements or identify gaps.","aliases":["responsive-ui-prototype"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:50:02.000Z","updatedAt":"2020-04-21T15:12:37.308Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":40,"name":"Visual Design","productKey":"visual_design_prod","category":"generic","subCategory":"generic","icon":"product-design-app-visual","brief":"1-15 screens","details":"Create development-ready designs","aliases":["visual-design","visual_design_prod"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","hidden":false,"affectsQuickQuote":true,"icon":"question","options":[{"iconOptions":{"number":"1-3"},"minTimeUp":0,"icon":"NumberText","title":"screens","value":"1-3","quoteUp":0,"maxTimeUp":0,"desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"minTimeUp":3,"icon":"NumberText","title":"screens","value":"4-8","quoteUp":2000,"maxTimeUp":5,"desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"minTimeUp":8,"icon":"NumberText","title":"screens","value":"9-15","quoteUp":3500,"maxTimeUp":12,"desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","type":"tiled-radio-group","title":"How many screens do you need designed?"},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"icon":"question","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Infographic","required":true},{"subSections":[{"fieldName":"details.appScreens.screens","hideTitle":true,"questions":[{"fieldName":"name","icon":"question","description":"Describe your objectives for creating this application","validations":"isRequired","type":"textinput","title":"Screen name","required":true,"validationError":"Screen name cannot be blank"},{"fieldName":"description","icon":"question","description":"What are the important features/capabilities that the screen provides to your end users?","validations":"isRequired","type":"textbox","title":"What are the things the user can do on this screen?","required":true,"validationError":"Answer cannot be blank"},{"fieldName":"importanceLevel","icon":"question","options":[{"title":"1","value":1},{"title":"2","value":2},{"title":"3","value":3},{"title":"4","value":4},{"title":"5","value":5},{"title":"6","value":6},{"title":"7","value":7},{"title":"8","value":8},{"title":"9","value":9},{"title":"10","value":10}],"description":"Pick how important is this screen for your project from 1 to 10","type":"select-dropdown","title":"Screen importance","required":true}],"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"screens","type":"screens","title":"Screens","required":true}],"description":"Please describe all the primary screens first. It is important to think about the biggest problem of your application, rather than list all possible screens. Well documented and researched design patterns like \"Settings\", \"Search\", \"Listing\", \"Log In\", \"Registration\" do not need to be the focus of the design, unless you're doing something transformative with said screens. In that case please list in details what is the novel approach for your screens.","id":"appScreens","title":"App Screens","required":true},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.designSpecification.guidelines","description":"Do you have brand guidelines that need to be followed? If yes, please include a link or attach them in the definition section, above.","id":"guidelines","type":"textbox","title":"Guidelines"},{"fieldName":"details.designSpecification.examples","description":"Are there any apps or sites that have a look and feel that you would want used as inspiration? Please provide links or examples.","id":"examples","type":"textbox","title":"Examples"},{"fieldName":"details.designSpecification.excludeExamples","description":"On the other hand, are there any apps or sites that you dislike? Please provide links or examples.","id":"excludeExamples","type":"textbox","title":"Exclude Examples"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Guidelines","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-12-07T07:34:28.000Z","updatedAt":"2020-04-21T15:12:37.309Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":55,"name":"Additional form factor","productKey":"generic-design-add-on-1","category":"generic","subCategory":"test-no-id","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-design-add-on-1"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:07:46.000Z","updatedAt":"2020-04-21T15:12:37.306Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":9,"name":"caas-intake","productKey":"caas_intake","category":"generic","subCategory":"generic","icon":"product-app-app","brief":"CaaS","details":"CaaS","aliases":["caas-intake","caas","caas_intake"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief describe your application","validationErrors":{"isRequired":"Please describe your application.","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.resources.total","hidden":true,"icon":"question","description":"","type":"textbox","title":"How many full time resources do you need?","required":true,"validationError":"Please enter number of resources"},{"fieldName":"details.resources.months","hidden":true,"icon":"question","options":[{"title":"1","value":"1"},{"title":"2","value":"2"},{"title":"3","value":"3"},{"title":"4","value":"4"},{"title":"5","value":"5"},{"title":"6","value":"6"},{"title":"7","value":"7"},{"title":"8","value":"8"},{"title":"9","value":"9"},{"title":"10","value":"10"},{"title":"11","value":"11"},{"title":"12","value":"12"}],"description":"","type":"slide-radiogroup","title":"How many months do you need the resource for","required":true,"validationError":"Please select one"},{"fieldName":"details.resources.skills","hidden":true,"icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Data Science","value":"data-sci"},{"label":"Android","value":"android"},{"label":"java","value":"java"},{"label":".NET","value":"dotnet"},{"label":"NodeJS","value":"node"},{"label":"Javascript","value":"javascript"},{"label":"ReactJS","value":"react"},{"label":"AngularJS","value":"angular"}],"description":"","type":"checkbox-group","title":"What skills do you need?"},{"fieldName":"details.resources.hourlyrate","hidden":true,"icon":"question","options":[{"title":"Under $30","value":"under30"},{"title":"Under $60","value":"under60"},{"title":"Under $80","value":"under80"},{"title":"Under $100","value":"under100"},{"title":"Under $125","value":"under125"},{"title":"Under $150","value":"under150"},{"title":"Over $150","value":"over150"}],"description":"","type":"slide-radiogroup","title":"What is the typical hourly rate you are paying?"},{"fieldName":"details.resources.hourlyrate","hidden":true,"icon":"question","options":[{"title":"English","value":"english"},{"title":"Spanish","value":"spanish"},{"title":"German","value":"german"},{"title":"Japanese","value":"japanese"},{"title":"Other","value":"other"}],"description":"","type":"slide-radiogroup","title":"What language would you like to interact with the team?"},{"fieldName":"details.resources.tooling","hidden":true,"description":"Please List all project tools you normally interact with","type":"textbox","title":"Project Tools you utilize for interacting with developers"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please detail any other additional information. After completing this form, you'll be able to add additional information about your code base","id":"notes","type":"notes","title":"Additional Notes"}],"description":"Welcome to your own private Gig Crowd","id":"appDefinition","title":"caas-intake","required":true},{"subSections":[{"questions":[{"fieldName":"details.security.codeURL","icon":"question","description":"(if you prefer you can also upload your code below)","type":"textbox","title":"Please provide a URL to your code base repository"},{"fieldName":"details.security.additionalInfo","icon":"question","description":"","type":"textbox","title":"Please provide Topcoder with any additional information about accessing your code base"}],"description":"","id":"additional","type":"questions","title":"Codebase questions","required":false},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please provide us access to your codebase below or contact Topcoder through your dashboard.","id":"optionals","title":"Code base","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T14:23:13.000Z","updatedAt":"2020-04-21T15:12:37.311Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":2,"name":"Wireframes","productKey":"wireframes","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"10-15 screens","details":"Plan and explore the navigation and structure of your app","aliases":["wireframes"],"template":{"sections":[{"subSections":[{"fieldName":"details.appScreens.screens","hideTitle":true,"questions":[{"fieldName":"name","icon":"question","description":"Describe your objectives for creating this application","validations":"isRequired","type":"textinput","title":"Screen name","required":true,"validationError":"Screen name cannot be blank"},{"fieldName":"description","icon":"question","description":"What are the important features/capabilities that the screen provides to your end users?","validations":"isRequired","type":"textbox","title":"What are the things the user can do on this screen?","required":true,"validationError":"Answer cannot be blank"},{"fieldName":"importanceLevel","icon":"question","options":[{"title":"1","value":1},{"title":"2","value":2},{"title":"3","value":3},{"title":"4","value":4},{"title":"5","value":5},{"title":"6","value":6},{"title":"7","value":7},{"title":"8","value":8},{"title":"9","value":9},{"title":"10","value":10}],"description":"Pick how important is this screen for your project from 1 to 10","type":"select-dropdown","title":"Screen importance","required":true}],"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"screens","type":"screens","title":"Screens","required":true}],"description":"Please describe all the primary screens first. It is important to think about the biggest problem of your application, rather than list all possible screens. Well documented and researched design patterns like \"Settings\", \"Search\", \"Listing\", \"Log In\", \"Registration\" do not need to be the focus of the design, unless you're doing something transformative with said screens. In that case please list in details what is the novel approach for your screens.","id":"appScreens","title":"App Screens","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-05-31T05:46:49.000Z","updatedAt":"2020-04-21T15:12:37.307Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":60,"name":"Dev/QA add-on 3 (non-generic)","productKey":"gtest-dev-qa-add-on-3","category":"test-product-category","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["gtest-dev-qa-add-on-3"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:09:15.000Z","updatedAt":"2020-04-21T15:12:37.309Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":69,"name":"UI Prototype","productKey":"ui-prototype","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"UI Prototype","details":"You'll get to pick one form factor: desktop, tablet or mobile.","aliases":["ui-prototype"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:48:08.000Z","updatedAt":"2020-04-21T15:12:37.310Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":72,"name":"API Development","productKey":"api-development","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"API Development","details":"Develop an API for your application.","aliases":["api-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:58:01.000Z","updatedAt":"2020-04-21T15:12:37.312Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":75,"name":"Email (SMTP Server) Setup","productKey":"smtp-server-setup","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Email (SMTP Server) Setup","details":"Develop a configured SMTP server to provide email notifications from your application.","aliases":["smtp-server-setup"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:07:08.000Z","updatedAt":"2020-04-21T15:12:37.307Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":67,"name":"Design Direction","productKey":"design-direction","category":"design","subCategory":"ideation","icon":"../../assets/icons/product-design-wireframes","brief":"Ideation","details":"Let Topcoder set your design project up for success by first partnering to put-together requirements documentation, quick wireframes, user profiles, or sitemaps, which can be used by the Community to deliver the final designs you need.","aliases":["ideation"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:29:03.000Z","updatedAt":"2020-04-21T15:12:37.308Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":79,"name":"Location Based Services","productKey":"location-based-services","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Location Based Services","details":"Support location-based features by tracking your users geographic location.","aliases":["location-based-services"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:10:46.000Z","updatedAt":"2020-04-21T15:12:37.315Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":66,"name":"Zeplin Handoff","productKey":"zeplin-app-handoff","category":"design","subCategory":"deployment","icon":"../../assets/icons/product-design-wireframes","brief":"Zeplin App Handoff","details":"All downloadable and CSS design deliverables can be handed off using Zeplin, which will prepare them for development.","aliases":["zeplin-app-handoff"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:27:22.000Z","updatedAt":"2020-04-21T15:12:37.314Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":39,"name":"App","productKey":"application_development","category":"generic","subCategory":"generic","icon":"product-app-app","brief":"Apps","details":"Build apps for mobile, web, or wearables","aliases":["app","application_development"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.....","id":"appDefinition","title":"App","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-12-07T07:31:43.000Z","updatedAt":"2020-04-21T15:12:37.310Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":80,"name":"Containerized Code","productKey":"containerized-code","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Containerized Code","details":"Containerization of the code base using Docker for easy and efficient deployment and maintenance.","aliases":["containerized-code"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:12:12.000Z","updatedAt":"2020-04-21T15:12:37.315Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":160,"name":"Additional API Development","productKey":"additional-api-development","category":"api","subCategory":"api_and_integrations","icon":"api-development","brief":"Additional API Development","details":"Indicate the additional number of APIs you need developed","aliases":["additional-api-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-05-29T09:55:14.000Z","updatedAt":"2020-04-21T15:12:37.313Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":59,"name":"Dev/QA add-on 2","productKey":"generic-dev-qa-add-on-2","category":"generic","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-dev-qa-add-on-2"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:56.000Z","updatedAt":"2020-04-21T15:12:37.310Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":57,"name":"10-15 additional screens","productKey":"gtest-design-add-on-3","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["gtest-design-add-on-3"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:33.000Z","updatedAt":"2020-04-21T15:12:37.316Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":8,"name":"topgear-dev","productKey":"topgear_dev","category":"design","subCategory":"DESIGN","icon":"product-app-app","brief":"Topgear","details":"Topgear","aliases":["topgear-dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal.du","hidden":true,"icon":"question","description":"","type":"textbox","title":"DU"},{"fieldName":"details.appDefinition.users.projectCode","hidden":true,"icon":"question","type":"textbox","title":"Project Code"},{"fieldName":"details.appDefinition.users.cost_center","hidden":true,"icon":"question","type":"textbox","title":"Cost Center code"},{"fieldName":"details.appDefinition.users.ng3","hidden":true,"icon":"question","type":"textbox","title":"Part of NG3"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"topgear-dev","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T14:18:52.000Z","updatedAt":"2020-04-21T15:12:37.309Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":165,"name":"First to Finish","productKey":"challenge-FIRST_2_FINISH","category":"generic","subCategory":"challenge","icon":"challenge-FIRST_2_FINISH","brief":"First to Finish","details":"First to Finish","aliases":["challenge-first_2_finish"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T05:53:19.000Z","updatedAt":"2020-04-21T15:12:37.314Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":18,"name":"Real World Testing","productKey":"real_world_testing","category":"generic","subCategory":"generic","icon":"product-qa-crowd-testing","brief":"TBD","details":"Exploratory Testing, Cross browser-device Testing","aliases":["real-world-testing","real_world_testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.testType","hidden":true,"icon":"question","options":[{"iconOptions":{"filePath":"icon-test-unstructured","fill":"#00000"},"price":4650,"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"filePath":"icon-test-structured","fill":"#00000"},"price":5183,"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"filePath":"icon-dont-know","fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","type":"tiled-radio-group","title":"What kind of crowd testing are you interested in?","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"fieldName":"details.appDefinition.expectedHours","hidden":true,"icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Do you have test cases you would like executed? These are essential when running structured testing and optional for unstructured testing. If you are planning a structured test cycle and do not have test cases do not worry, we can help!","type":"radio-group","title":"Do you have test cases written?","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.userInfo","hidden":true,"icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help you find the best testers for your application.","type":"textbox","title":"Please tell us about your users."},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Real World Testing","required":true},{"subSections":[{"questions":[{"fieldName":"details.testingNeeds.description","icon":"question","description":"","id":"testingNeeds.description","type":"textbox","title":"Please describe your website and/or application."},{"fieldName":"details.testingNeeds.inScope","icon":"question","description":"","id":"testingNeeds.inScope","type":"textbox","title":"Please describe which features or components are in-scope in this testing effort."},{"fieldName":"details.testingNeeds.outOfScope","icon":"question","description":"","id":"testingNeeds.outOfScope","type":"textbox","title":"Are any features or components out of scope? If yes, please describe."},{"fieldName":"details.testingNeeds.duration","icon":"question","description":"","id":"testingNeeds.duration","type":"textbox","title":"Do you have a specific timeline for testing? If so, please provide approximate start and end dates."}],"description":"","id":"scope","type":"questions","title":"Scope","required":false},{"questions":[{"fieldName":"details.testerDetails.demographics","icon":"question","description":"","id":"testerDetails.demographics","type":"textbox","title":"Do you have preferred demographics you would like to target?"},{"fieldName":"details.testerDetails.geographies","icon":"question","description":"","id":"testerDetails.geographies","type":"textbox","title":"Would you like to target any specific geographies?"},{"fieldName":"details.testerDetails.skills","icon":"question","description":"","id":"testerDetails.skills","type":"textbox","title":"Are any specific skills required to test your application? If so, please list them."}],"description":"","id":"testerDetails","type":"questions","title":"Tester Details","required":false},{"questions":[{"fieldName":"details.testEnvironment.environmentDetails","icon":"question","description":"","id":"testEnvironment.environmentDetails","type":"textbox","title":"Do you have a version of the application available for testers to access? If so, please provide details. Details can include a test URL, access information, etc."},{"fieldName":"details.testEnvironment.assets","icon":"question","description":"","id":"testEnvironment.assets","type":"textbox","title":"Are any test assets available? For exmaple: test plan, test scenario, test scripts, test data."},{"fieldName":"details.testEnvironment.otherInformation","icon":"question","description":"","id":"testEnvironment.other","type":"textbox","title":"Are there any other specific details related to the environment you can share?"}],"description":"","id":"testEnvironment","type":"questions","title":"Testing Enviroment","required":false},{"questions":[{"fieldName":"details.targetApplication.description","icon":"question","description":"","id":"targetApplication.description","type":"textbox","title":"Please describe your application."},{"fieldName":"details.targetApplication.platform","icon":"question","description":"","id":"targetApplication.platform","type":"textbox","title":"Please list all platforms the application should be tested on."},{"fieldName":"details.targetApplication.training","icon":"question","description":"","id":"targetApplication.training","type":"textbox","title":"Does the application require training to utilize it properly? If so, are you able to provide these inputs?"}],"description":"","id":"targetApplication","type":"questions","title":"Target Application","required":false},{"questions":[{"fieldName":"details.cyclePreferences.usabilitySuggestions","icon":"question","description":"","id":"preferences.suggestions","type":"textbox","title":"Would you like usability suggestions included in the issue report?"},{"fieldName":"details.cyclePreferences.omissions","icon":"question","description":"","id":"preferences.omissions","type":"textbox","title":"Are there any types of defects you would like ommitted from issue reports?"}],"description":"","id":"cyclePreferences","type":"questions","title":"Test Cycle Preferences","required":false},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer these additional questions to better help us understand your needs.","id":"testingNeeds","title":"Testing Needs","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-13T08:59:35.000Z","updatedAt":"2020-04-21T15:12:37.312Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":27,"name":"Development Iteration (3 Milestones)","productKey":"development-iteration-3-milestones","category":"development","subCategory":"app_dev","icon":"product-dev-other.svg","brief":"3 Milestones","details":"Development iteration with 3 milestones","aliases":["development-iteration-3-milestones","development_iteration_3_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Iteration (3 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-09T12:29:36.000Z","updatedAt":"2020-04-21T15:12:37.308Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":90,"name":"Automation Testing","productKey":"automation-testing","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"Automation Testing","details":"Automation Testing","aliases":["automation-testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:25:53.000Z","updatedAt":"2020-04-21T15:12:37.313Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":17,"name":"Other Design","productKey":"generic_design","category":"generic","subCategory":"generic--NEW","icon":"product-design-other","brief":"other designs","details":"Get help with other types of design","aliases":["generic-design","generic_design"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"fieldName":"description","hidden":true,"description":"Description","id":"projectInfo","type":"notes","title":"Project Info","required":true},{"questions":[{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Other Design","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-type-serif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-type-sans-serif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-icon-type-color-home","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-icon-type-outline-home","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-icon-type-glyph-home","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T15:48:23.000Z","updatedAt":"2020-04-21T15:12:37.314Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":20,"name":"Back-end & API","productKey":"api_dev","category":"generic","subCategory":"generic","icon":"../../assets/icons/product-dev-integration.svg","brief":"Back-end & API","details":"Build the server, DB, and API for your app","aliases":["api-development","api_dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Integration","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-21T12:32:47.000Z","updatedAt":"2020-04-21T15:12:37.315Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":167,"name":"Marathon Match","productKey":"challenge-DEVELOP_MARATHON_MATCH","category":"generic","subCategory":"challenge","icon":"challenge-DEVELOP_MARATHON_MATCH","brief":"Marathon Match","details":"Marathon Match","aliases":["challenge-develop_marathon_match"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:02:24.000Z","updatedAt":"2020-04-21T15:12:37.315Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":22,"name":"Mobility Testing","productKey":"mobility_testing","category":"generic","subCategory":"generic","icon":"product-qa-mobility-testing","brief":"TBD","details":"App Certification, Lab on Hire, User Sentiment Analysis","aliases":["mobility-testing","mobility_testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.mobilityTestingType","hidden":true,"icon":"question","options":[{"title":"Select","value":""},{"title":"Banking or Financial Services","value":"finserv"},{"title":"eCommerce","value":"ecommerce"},{"title":"Media / Entertainment","value":"entertainment"},{"title":"Gaming","value":"gaming"},{"title":"Health and Fitness","value":"health"},{"title":"Manufacturing","value":"manufacturing"},{"title":"Retail","value":"retail"},{"title":"Travel / Transportation","value":"travel"},{"title":"Other","value":"other"}],"description":"Please let us know the type of application to test. If you are unsure, please select \"Other\"","type":"select-dropdown","title":"What kind of application would you like to test?","required":true,"validationError":"Please let us know what kind of application you would like to test."},{"fieldName":"details.appDefinition.testCases","hidden":true,"icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Please let us know if you have any test cases written. If not, they can be created as part of your test cycle.","type":"radio-group","title":"Do you have test cases written?","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.userInfo","hidden":true,"icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help us find the best testers for your application.","type":"textbox","title":"Please tell us about your users."},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Mobility Testing","required":true},{"subSections":[{"questions":[{"fieldName":"details.testingNeeds.description","icon":"question","description":"","id":"testingNeeds.description","type":"textbox","title":"Please describe your website and/or application."},{"fieldName":"details.testingNeeds.inScope","icon":"question","description":"","id":"testingNeeds.inScope","type":"textbox","title":"Please describe which features or components are in-scope in this testing effort."},{"fieldName":"details.testingNeeds.outOfScope","icon":"question","description":"","id":"testingNeeds.outOfScope","type":"textbox","title":"Are any features or components out of scope? If yes, please describe."},{"fieldName":"details.testingNeeds.duration","icon":"question","description":"","id":"testingNeeds.duration","type":"textbox","title":"Do you have a specific timeline for testing? If so, please provide approximate start and end dates."}],"description":"","id":"scope","type":"questions","title":"Scope","required":false},{"questions":[{"fieldName":"details.testerDetails.demographics","icon":"question","description":"","id":"testerDetails.demographics","type":"textbox","title":"Do you have preferred demographics you would like to target?"},{"fieldName":"details.testerDetails.geographies","icon":"question","description":"","id":"testerDetails.geographies","type":"textbox","title":"Would you like to target any specific geographies?"},{"fieldName":"details.testerDetails.skills","icon":"question","description":"","id":"testerDetails.skills","type":"textbox","title":"Are any specific skills required to test your application? If so, please list them."}],"description":"","id":"testerDetails","type":"questions","title":"Tester Details","required":false},{"questions":[{"fieldName":"details.testEnvironment.environmentDetails","icon":"question","description":"","id":"testEnvironment.environmentDetails","type":"textbox","title":"Do you have a version of the application available for testers to access? If so, please provide details. Details can include a test URL, access information, etc."},{"fieldName":"details.testEnvironment.assets","icon":"question","description":"","id":"testEnvironment.assets","type":"textbox","title":"Are any test assets available? For exmaple: test plan, test scenario, test scripts, test data."},{"fieldName":"details.testEnvironment.otherInformation","icon":"question","description":"","id":"testEnvironment.other","type":"textbox","title":"Are there any other specific details related to the environment you can share?"}],"description":"","id":"testEnvironment","type":"questions","title":"Testing Enviroment","required":false},{"questions":[{"fieldName":"details.targetApplication.description","icon":"question","description":"Please describe your application.","id":"targetApplication.description","type":"textbox","title":""},{"fieldName":"details.targetApplication.platform","icon":"question","description":"Please list all platforms the application should be tested on.","id":"targetApplication.platform","type":"textbox","title":""},{"fieldName":"details.targetApplication.training","icon":"question","description":"","id":"targetApplication.training","type":"textbox","title":"Does the application require training to utilize it properly? If so, are you able to provide these inputs?"}],"description":"","id":"targetApplication","type":"questions","title":"Target Application","required":false},{"questions":[{"fieldName":"details.cyclePreferences.usabilitySuggestions","icon":"question","description":"Would you like usability suggestions included in the issue report?","id":"preferences.suggestions","type":"textbox","title":""},{"fieldName":"details.cyclePreferences.omissions","icon":"question","description":"Are there any types of defects you would like ommitted from issue reports?","id":"preferences.omissions","type":"textbox","title":""}],"description":"","id":"cyclePreferences","type":"questions","title":"Test Cycle Preferences","required":false},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer these additional questions to better help us understand your needs.","id":"testingNeeds","title":"Testing Needs","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-07-06T07:27:33.000Z","updatedAt":"2020-04-21T15:12:37.316Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":161,"name":"Additional API Integrations","productKey":"additional-api-integration","category":"api","subCategory":"api_and_integrations","icon":"additional-api-integration","brief":"Additional API Integration","details":"Indicate the additional number of APIs you need integrated","aliases":["additional-api-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-05-29T09:57:52.000Z","updatedAt":"2020-04-21T15:12:37.313Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":74,"name":"Minimal Battery Usage Implementation","productKey":"min-battery-use-impl","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Minimal Battery","details":"Optimize your application to use minimal network bandwidth and battery usage.","aliases":["min-battery-use-impl"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:06:28.000Z","updatedAt":"2020-04-21T15:12:37.363Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":89,"name":"Continuous Integration / Continuous Deployment","productKey":"continuous-integration-deployment","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"CI/CD","details":"Engage with Topcoder using CI/CD processes to establish a development pipeline.","aliases":["continuous-integration-deployment"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:22:24.000Z","updatedAt":"2020-04-21T15:12:37.363Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":81,"name":"Google Analytics Implementation","productKey":"google-analytics-impl","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Google Analytics Implementation","details":"Implement Google Analytics to track and monitor user interactions on your application.","aliases":["google-analytics-impl"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:12:52.000Z","updatedAt":"2020-04-21T15:12:37.364Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":82,"name":"SSO Integration","productKey":"sso-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"SSO Integration","details":"Integrate your application with your enterprise single sign-on capability.","aliases":["sso-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:13:35.000Z","updatedAt":"2020-04-21T15:12:37.365Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":85,"name":"Social Media Integration","productKey":"social-media-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"Social Media Integration","details":"Integrate your application with social media providers, such as Facebook, Instagram, Twitter, Google +, etc.","aliases":["social-media-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:15:29.000Z","updatedAt":"2020-04-21T15:12:37.365Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":88,"name":"Blackduck License scanning","productKey":"blackduck-scanning","category":"development","subCategory":"security","icon":"../../assets/icons/product-dev-integration.svg","brief":"Blackduck License scanning","details":"Leverage Blackduck’s open-sourced compliance report for an unlimited number of reports for up to 3 months.","aliases":["blackduck-scanning"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:21:45.000Z","updatedAt":"2020-04-21T15:12:37.366Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":87,"name":"Checkmarx Security/Vulnerability Code Scanning","productKey":"checkmarx-scanning","category":"development","subCategory":"security","icon":"../../assets/icons/product-dev-integration.svg","brief":"Checkmarx Scanning","details":"Leverage Checkmarx’s standard security and code coverage report for an unlimited number of reports for up to 3 months.","aliases":["checkmarx-scanning"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:21:09.000Z","updatedAt":"2020-04-21T15:12:37.364Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":91,"name":"Performance Testing Cycle","productKey":"performance-testing-cycle","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"Performance Testing Cycle","details":"Performance Testing Cycle","aliases":["performance-testing-cycle"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:26:39.000Z","updatedAt":"2020-04-21T15:12:37.365Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":84,"name":"SMS Gateway Integration","productKey":"sms-gateway-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"SMS Gateway Integration","details":"Integrate your application with an external SMS gateway provider.","aliases":["sms-gateway-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:14:54.000Z","updatedAt":"2020-04-21T15:12:37.363Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":93,"name":"User Acceptance Testing Enhancements","productKey":"user-acceptance-testing-enhancements","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"User Acceptance Testing Enhancements","details":"User Acceptance Testing Enhancements","aliases":["user-acceptance-testing--enhancements"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:28:34.000Z","updatedAt":"2020-04-21T15:12:37.367Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":77,"name":"Responsive Design Implementation","productKey":"resp-design-impl","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Responsive Design Implementation","details":"Implementation of Bootstrap, Material Design, Polymer or equivalent to support responsive design.","aliases":["resp-design-impl"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:08:50.000Z","updatedAt":"2020-04-21T15:12:37.364Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":71,"name":"UX Testing With Maze","productKey":"ux-testing-with-maze","category":"design","subCategory":"testing","icon":"../../assets/icons/product-design-wireframes","brief":"UX Testing with Maze","details":"Test your application designs user experience with Topcoder’s partner, Maze. Maze will enable dozens of testers to test your application designs in under 24 hours and provide feedback on opportunities to optimize the user experience.","aliases":["ux-testing-with-maze"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:51:03.000Z","updatedAt":"2020-04-21T15:12:37.412Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":83,"name":"Third Party System Integration","productKey":"third-party-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"Third Party System Integration","details":"Integrate your application with an external 3rd party system.","aliases":["third-party-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:14:19.000Z","updatedAt":"2020-04-21T15:12:37.412Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":78,"name":"Admin Tool Development","productKey":"admin-tool-development","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Admin Tool Development","details":"Develop an administrative tool or panel to enable direct management of your application.","aliases":["admin-tool-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:10:04.000Z","updatedAt":"2020-04-21T15:12:37.412Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"ProjectType":[{"key":"chatbot","displayName":"Chatbot","icon":"product-cat-chatbot","question":"What do you want to develop?","info":"Build, train and test a custom conversation for your chatbot","aliases":["all-chatbots"],"disabled":true,"hidden":true,"metadata":{"name":"tom","id":2},"deletedAt":null,"createdAt":"2018-06-06T10:02:34.000Z","updatedAt":"2020-04-21T15:12:36.035Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"analytics-and-data-science","displayName":"Analytics & Data Science","icon":"product-analytics-computer-vision","question":"lorem","info":"Get cutting-edge solutions from the best minds in data and analytics","aliases":["analytics-and-data-science"],"disabled":false,"hidden":false,"metadata":{},"deletedAt":null,"createdAt":"2020-01-11T04:22:03.150Z","updatedAt":"2020-04-21T15:12:36.035Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app-test-2","displayName":"app-test-2","icon":"app-test-2","question":"app-test-1","info":"app-test-1","aliases":["app-test-1"],"disabled":false,"hidden":true,"metadata":{},"deletedAt":null,"createdAt":"2019-10-07T04:36:20.000Z","updatedAt":"2020-04-21T15:12:36.036Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"test-no-id","displayName":"test-no-id","icon":"test-no-id","question":"test-no-id","info":"test-no-id","aliases":["test-no-id"],"disabled":true,"hidden":true,"metadata":{},"deletedAt":null,"createdAt":"2019-01-24T12:19:47.000Z","updatedAt":"2020-04-21T15:12:36.037Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"wireframes","displayName":"Design","icon":"t","question":"What kind of design do you need?","info":"Pick the right design project for your needs - wireframes, visual, or other","aliases":["t","b","c"],"disabled":true,"hidden":false,"metadata":{},"deletedAt":null,"createdAt":"2018-12-10T12:22:17.000Z","updatedAt":"2020-04-21T15:12:36.037Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app_dev","displayName":"Application Development","icon":"prod-cat-app-icon","question":"What kind of devlopment you need?","info":"Application Development Info","aliases":["key-1","key_1"],"disabled":true,"hidden":true,"metadata":{"slack-notification-mappings":{"color":"#96d957","label":"Full App"}},"deletedAt":null,"createdAt":"2020-04-21T15:06:24.181Z","updatedAt":"2020-04-21T15:12:36.036Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"website","displayName":"Website","icon":"product-cat-website","question":"What do you want to develop?","info":"Design and build the high-impact pages for your blog, online store, or company","aliases":["all-websites"],"disabled":false,"hidden":true,"metadata":{"a":1,"job":{"title":"SAD"}},"deletedAt":null,"createdAt":"2018-06-06T10:02:25.000Z","updatedAt":"2020-04-21T15:12:36.036Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app-test","displayName":"App Test","icon":"product-cat-app","question":"What do you want to develop?","info":"Build a phone, tablet, wearable, or desktop app","aliases":["application_development","app"],"disabled":false,"hidden":true,"metadata":{"a":1,"info":{"c":23,"age":3}},"deletedAt":null,"createdAt":"2019-01-23T09:26:42.000Z","updatedAt":"2020-04-21T15:12:36.037Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"talent-as-a-service","displayName":"Talent as a Service","icon":"on-demand","question":"What do you want to develop?","info":"Engage top talent from Topcoder's proven community to deliver for a flat weekly fee. High performing resources are assigned to your team based on their qualitive results on the Topcoder platform.","aliases":["taas-offerings"],"disabled":false,"hidden":false,"metadata":{"filterable":false,"cardButtonText":"Tap Into Top Talent","pageInfo":"Create a private on-demand team","pageHeader":"Engage Talent","autoProceedToSingleProjectTemplate":false},"deletedAt":null,"createdAt":"2020-01-31T09:58:33.815Z","updatedAt":"2020-04-21T15:12:36.057Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"unscoped-solutions","displayName":"On Demand","icon":"product-cat-app","question":"What do you want to develop?","info":"Have a variety of work you need to accomplish? Consider purchasing budget capacity or engaging a long-term talent pool with high-demand skillsets, where you determine what items of work the crowd can help you with. Learn more here.","aliases":["unscoped-solutions"],"disabled":false,"hidden":true,"metadata":{"filterable":false,"pageInfo":"Lorem ipsum dolor sit amet 1","pageHeader":"Select Budget or Talent Projects"},"deletedAt":null,"createdAt":"2019-05-30T06:37:49.000Z","updatedAt":"2020-04-21T15:12:36.056Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"applications-and-websites","displayName":"Applications & Websites","icon":"product-app-app","question":"lorem","info":"Create something great with Topcoder.","aliases":["applications-and-websites"],"disabled":false,"hidden":false,"metadata":{},"deletedAt":null,"createdAt":"2020-01-11T04:32:49.447Z","updatedAt":"2020-04-21T15:12:36.057Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app","displayName":"App","icon":"product-cat-app","question":"What do you want to develop?","info":"Build a phone, tablet, wearable, or desktop app","aliases":["application_development","app"],"disabled":false,"hidden":false,"metadata":{"a":1,"info":{"c":23,"age":3}},"deletedAt":null,"createdAt":"2018-06-06T10:02:13.000Z","updatedAt":"2020-04-21T15:12:36.057Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"scoped-solutions","displayName":"Solutions","icon":"solutions","question":"Select your solution","info":"Explore Topcoder's application, website, quality assurance, and data science solutions here.","aliases":["scoped-solutions"],"disabled":false,"hidden":false,"metadata":{"cardButtonText":"View Solutions","pageInfo":"We’ve got you covered across a wide-variety of disciplines","pageHeader":"Topcoder Solutions"},"deletedAt":null,"createdAt":"2019-05-30T06:35:38.000Z","updatedAt":"2020-04-21T15:12:36.058Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"quality_assurance","displayName":"Quality Assurance","icon":"product-cat-qa","question":"What kind of quality assurance (QA) do you need?","info":"Find the bugs in your software","aliases":["all-quality-assurance"],"disabled":false,"hidden":false,"metadata":{"key":2},"deletedAt":null,"createdAt":"2018-06-06T10:03:19.000Z","updatedAt":"2020-04-21T15:12:36.058Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"ProductCategory":[{"key":"generic","displayName":"GENERIC","icon":"icon-edit","question":"question","info":"info","aliases":["fd","e","a a","b"],"disabled":true,"hidden":true,"deletedAt":null,"createdAt":"2018-12-06T12:51:19.000Z","updatedAt":"2020-04-21T15:12:36.144Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"design","displayName":"Design","icon":"test","question":"Who","info":"what","aliases":["design"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:21:51.000Z","updatedAt":"2020-04-21T15:12:36.152Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"general_features","displayName":"General Features","icon":"general_features","question":"general_features","info":"general_features","aliases":["general_features"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-04-17T10:41:15.000Z","updatedAt":"2020-04-21T15:12:36.152Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"testing","displayName":"Design Testing","icon":"Testing","question":"Testing","info":"Testing","aliases":["testing"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:52:00.000Z","updatedAt":"2020-04-21T15:12:36.152Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"security","displayName":"Security","icon":"security","question":"Security","info":"Security","aliases":["security"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:53:49.000Z","updatedAt":"2020-04-21T15:12:36.153Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"api","displayName":"API","icon":"API","question":"API","info":"API","aliases":["api"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:52:44.000Z","updatedAt":"2020-04-21T15:12:36.153Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"ideation","displayName":"Design Ideation Consultation","icon":"Ideation","question":"Ideation","info":"Ideation","aliases":["ideation"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:28:17.000Z","updatedAt":"2020-04-21T15:12:36.153Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"qa","displayName":"QA","icon":"QA","question":"What do you want to get QA for?","info":"What do you want to get QA for?","aliases":["qa","quality-assurance"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:23:38.000Z","updatedAt":"2020-04-21T15:12:36.151Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"development","displayName":"Development","icon":"Development","question":"What do you want to develop?","info":"What do you want to develop?","aliases":["development"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:22:57.000Z","updatedAt":"2020-04-21T15:12:36.153Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app_dev","displayName":"Application Development","icon":"prod-cat-app-icon","question":"What kind of devlopment you need?","info":"Application Development Info","aliases":["key-1","key_1"],"disabled":true,"hidden":true,"deletedAt":null,"createdAt":"2020-04-21T15:06:06.332Z","updatedAt":"2020-04-21T15:12:36.152Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"quality_assurance_new","displayName":"QA New","icon":"product-cat-qa","question":"What kind of development do you need?","info":"Test and fix bugs in your software","aliases":["all-quality-assurance"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-12-14T11:06:00.000Z","updatedAt":"2020-04-21T15:12:36.164Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"deployment","displayName":"Design Deployment","icon":"Deployment","question":"What type of deployment you want?","info":"What type of deployment you want?","aliases":["deployment"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:24:09.000Z","updatedAt":"2020-04-21T15:12:36.164Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"api_and_integrations","displayName":"API & Integrations","icon":"API","question":"API & Integrations","info":"API & Integrations","aliases":["API & Integrations"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-04-17T10:34:59.000Z","updatedAt":"2020-04-21T15:12:36.164Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"test-product-category","displayName":"Test product Category","icon":"prouct","question":"what","info":"wy","aliases":["test-product-category"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-12-31T12:07:19.000Z","updatedAt":"2020-04-21T15:12:36.164Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"integrations","displayName":"Integrations","icon":"integrations","question":"Integrations","info":"Integrations","aliases":["integrations"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:53:23.000Z","updatedAt":"2020-04-21T15:12:36.165Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"challenge","displayName":"Challenge","icon":"challenge","question":"challenge","info":"challenge","aliases":["challenge"],"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-08-06T05:36:44.000Z","updatedAt":"2020-04-21T15:12:36.165Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"MilestoneTemplate":[{"id":27,"name":"Report 1","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":16,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:47:16.000Z","updatedAt":"2020-04-21T15:12:40.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":18,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":7,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:19:01.000Z","updatedAt":"2020-04-21T15:12:40.967Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":14,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":8,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T15:02:48.000Z","updatedAt":"2020-04-21T15:12:39.817Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":4,"name":"Checkpoint Review","description":"dummy description","duration":5,"type":"checkpoint-review","order":17,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-07-17T03:10:08.000Z","updatedAt":"2020-04-21T15:12:39.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":24,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":3,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:35:56.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":93,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":7,"type":"generic-work","order":12,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:31.000Z","updatedAt":"2020-04-21T15:12:40.409Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":41,"name":"Timeline start (QA)","description":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":6,"plannedText":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. Development is underway.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:12:53.000Z","updatedAt":"2020-04-21T15:12:40.409Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":23,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":3,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:33:21.000Z","updatedAt":"2020-04-21T15:12:39.865Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":35,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":10,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:50:43.000Z","updatedAt":"2020-04-21T15:12:40.718Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":40,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":15,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:59:43.000Z","updatedAt":"2020-04-21T15:12:40.718Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":122,"name":"COPY Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":7,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:50.000Z","updatedAt":"2020-04-21T15:12:40.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":25,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":7,"type":"phase-specification","order":3,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:36:02.000Z","updatedAt":"2020-04-21T15:12:40.340Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":33,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":14,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:50:21.000Z","updatedAt":"2020-04-21T15:12:40.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":21,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":18,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:24:03.000Z","updatedAt":"2020-04-21T15:12:41.010Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":20,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":19,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:22:05.000Z","updatedAt":"2020-04-21T15:12:41.010Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":52,"name":"Adding Links","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"add-links","order":29,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"ddfd","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"df","hidden":true,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:50:34.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":50,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":12,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:48:44.000Z","updatedAt":"2020-04-21T15:12:39.817Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":36,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":15,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:59:03.000Z","updatedAt":"2020-04-21T15:12:40.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":81,"name":"test","description":"dummy description","duration":5,"type":"checkpoint-review","order":5,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-12-10T12:00:06.000Z","updatedAt":"2020-04-21T15:12:39.392Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":125,"name":"test","description":"dummy description","duration":5,"type":"checkpoint-review","order":6,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:52.000Z","updatedAt":"2020-04-21T15:12:39.399Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":34,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":19,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:50:33.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":77,"name":"COPY Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":12,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-12-08T10:13:46.000Z","updatedAt":"2020-04-21T15:12:40.791Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":128,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":9,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:54.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":48,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":15,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:37:02.000Z","updatedAt":"2020-04-21T15:12:40.862Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":45,"name":"Timeline start (design)","description":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","duration":1,"type":"phase-specification","order":5,"plannedText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:30:02.000Z","updatedAt":"2020-04-21T15:12:40.604Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":16,"name":"Design Review","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"checkpoint-review","order":21,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently developing the 5 options you selected into final designs.","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T16:08:43.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":49,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":8,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:47:28.000Z","updatedAt":"2020-04-21T15:12:40.967Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":129,"name":"Phase Specification","description":"dummy description","duration":5,"type":"phase-specification","order":1,"plannedText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","activeText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","completedText":"Great job! We're ready to roll. Work on this project phase will begin shortly.","blockedText":"dummy blockedText","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:55.000Z","updatedAt":"2020-04-21T15:12:39.015Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":42,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":14,"type":"generic-work","order":7,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:14:45.000Z","updatedAt":"2020-04-21T15:12:40.409Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":133,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":7,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"hh","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:57.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":17,"name":"Complete","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"delivery-design","order":33,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T16:12:43.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":89,"name":"Checkpoint Review","description":"dummy description","duration":5,"type":"checkpoint-review","order":9,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:28.000Z","updatedAt":"2020-04-21T15:12:39.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":97,"name":"Report 1","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":4,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:34.000Z","updatedAt":"2020-04-21T15:12:40.130Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":39,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":18,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:59:38.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":90,"name":"Final Designs","description":"dummy description","duration":5,"type":"final-designs","order":8,"plannedText":"We will design the remaining screens with the feedback from the 5 designs you selected. Once the designs are completed, you will see them here. You'll then choose your 3 favorite options.","activeText":"Our designers are hard at work, incorporating your feedback and designing the remaining screens. We will update this milestone once the progress bar reaches 100%, and you'll see all the links available below.","completedText":"You've selected the winning designs! This concludes the final design milestone.","blockedText":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:29.000Z","updatedAt":"2020-04-21T15:12:39.552Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":10,"name":"Final Fix","description":"dummy description","duration":1,"type":"final-fix","order":13,"plannedText":"dummy plannedText","activeText":"dummy activeText","completedText":"Below is the list of final fixes which are being implemented. Keep tracking delivery milestone for updates.","blockedText":"dummy blockText","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-07-22T04:06:21.000Z","updatedAt":"2020-04-21T15:12:39.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":79,"name":"Delivery111","description":"dummy description","duration":51,"type":"delivery-design","order":61,"plannedText":"Once we implement the final designs, your source files will be delivered here.","activeText":"Please indicate the top 3 things you'd like to change on the winning design. Any further changes will be out of the scope of this phase and will require you to extend the project by adding an additional phase.","completedText":"The final file deliverables are attached. This concludes both the milestone and the entire phase. We've added all the source files as per the phase specification. They'll also be permanently available for download at your convenience.","blockedText":"The agreed-upon final fixes are being implemented. We will provide an update once the progress bar reaches 100% and attach the final deliverables below.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-12-10T08:06:34.000Z","updatedAt":"2020-04-21T15:12:39.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":96,"name":"Delivery111","description":"dummy description","duration":51,"type":"delivery-design","order":64,"plannedText":"Once we implement the final designs, your source files will be delivered here.","activeText":"Please indicate the top 3 things you'd like to change on the winning design. Any further changes will be out of the scope of this phase and will require you to extend the project by adding an additional phase.","completedText":"The final file deliverables are attached. This concludes both the milestone and the entire phase. We've added all the source files as per the phase specification. They'll also be permanently available for download at your convenience.","blockedText":"The agreed-upon final fixes are being implemented. We will provide an update once the progress bar reaches 100% and attach the final deliverables below.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:33.000Z","updatedAt":"2020-04-21T15:12:39.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":126,"name":"Final Fix","description":"dummy description","duration":1,"type":"final-fix","order":14,"plannedText":"dummy plannedText","activeText":"dummy activeText","completedText":"Below is the list of final fixes which are being implemented. Keep tracking delivery milestone for updates.","blockedText":"dummy blockText","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:53.000Z","updatedAt":"2020-04-21T15:12:39.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":130,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":11,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:55.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":132,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":14,"type":"generic-work","order":3,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:56.000Z","updatedAt":"2020-04-21T15:12:40.101Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":44,"name":"Delivery (QA)","description":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery","order":10,"plannedText":"Once you accept the work, your QA report files will be delivered here.","activeText":"Once you accept the work, your QA report files will be delivered here.","completedText":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the work, your QA report files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:23:52.000Z","updatedAt":"2020-04-21T15:12:40.409Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":9,"name":"Final Designs","description":"dummy description","duration":5,"type":"final-designs","order":12,"plannedText":"We will design the remaining screens with the feedback from the 5 designs you selected. Once the designs are completed, you will see them here. You'll then choose your 3 favorite options.","activeText":"Our designers are hard at work, incorporating your feedback and designing the remaining screens. We will update this milestone once the progress bar reaches 100%, and you'll see all the links available below.","completedText":"You've selected the winning designs! This concludes the final design milestone.","blockedText":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-07-22T04:02:22.000Z","updatedAt":"2020-04-21T15:12:39.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":135,"name":"Design Work (checkpoint)","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"design-work","order":1,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":" ","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":" ","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T04:45:51.000Z","updatedAt":"2020-04-21T15:12:39.591Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":108,"name":"Adding Links","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"add-links","order":15,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"ddfd","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"df","hidden":true,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:41.000Z","updatedAt":"2020-04-21T15:12:40.211Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":92,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":1,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:30.000Z","updatedAt":"2020-04-21T15:12:39.766Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":95,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":6,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:32.000Z","updatedAt":"2020-04-21T15:12:39.810Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":120,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":11,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:49.000Z","updatedAt":"2020-04-21T15:12:39.817Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":107,"name":"Report","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":5,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:40.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":103,"name":"Design Review","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"checkpoint-review","order":16,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently developing the 5 options you selected into final designs.","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:38.000Z","updatedAt":"2020-04-21T15:12:40.220Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":78,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":12,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"hh","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-12-08T10:19:41.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":99,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":1,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:35.000Z","updatedAt":"2020-04-21T15:12:39.856Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":30,"name":"Report","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":10,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:48:35.000Z","updatedAt":"2020-04-21T15:12:40.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":43,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":7,"type":"generic-work","order":14,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:17:47.000Z","updatedAt":"2020-04-21T15:12:40.409Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":136,"name":"Checkpoint Review","description":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","duration":5,"type":"checkpoint-review","order":2,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T05:49:48.000Z","updatedAt":"2020-04-21T15:12:39.995Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":105,"name":"Timeline start (QA)","description":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":1,"plannedText":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. Development is underway.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:39.000Z","updatedAt":"2020-04-21T15:12:40.094Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":112,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":5,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:43.000Z","updatedAt":"2020-04-21T15:12:40.440Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":88,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":20,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:28.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":101,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":10,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:36.000Z","updatedAt":"2020-04-21T15:12:41.010Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":100,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":1,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:36.000Z","updatedAt":"2020-04-21T15:12:40.253Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":104,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":7,"type":"phase-specification","order":1,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:38.000Z","updatedAt":"2020-04-21T15:12:40.333Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":137,"name":"Design Work (final)","description":"We will take into account your feedback to create the best final versions of designs.","duration":7,"type":"design-work","order":3,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":" ","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":" ","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T05:52:29.000Z","updatedAt":"2020-04-21T15:12:40.366Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":106,"name":"Delivery (QA)","description":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery","order":5,"plannedText":"Once you accept the work, your QA report files will be delivered here.","activeText":"Once you accept the work, your QA report files will be delivered here.","completedText":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the work, your QA report files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:40.000Z","updatedAt":"2020-04-21T15:12:40.403Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":102,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":11,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:37.000Z","updatedAt":"2020-04-21T15:12:40.718Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":121,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":18,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"Design develoment is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:49.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":51,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":34,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:49:40.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":116,"name":"Timeline start (design)","description":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","duration":1,"type":"phase-specification","order":1,"plannedText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:46.000Z","updatedAt":"2020-04-21T15:12:40.565Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":46,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":3,"type":"community-work","order":4,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:32:27.000Z","updatedAt":"2020-04-21T15:12:40.599Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":47,"name":"Design Final Selection","description":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","duration":1,"type":"final-designs","order":12,"plannedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","activeText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{"requiredWinnersCount":8},"deletedAt":null,"createdAt":"2018-08-10T12:36:23.000Z","updatedAt":"2020-04-21T15:12:40.862Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":114,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":17,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:45.000Z","updatedAt":"2020-04-21T15:12:40.668Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":22,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":24,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:25:40.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":15,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":27,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"Design develoment is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T16:05:32.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":110,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":11,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:42.000Z","updatedAt":"2020-04-21T15:12:41.010Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":127,"name":"Complete","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"delivery-design","order":23,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:53.000Z","updatedAt":"2020-04-21T15:12:40.678Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":111,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":6,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:43.000Z","updatedAt":"2020-04-21T15:12:40.709Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":113,"name":"Design Final Selection","description":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","duration":1,"type":"final-designs","order":6,"plannedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","activeText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{"requiredWinnersCount":8},"deletedAt":null,"createdAt":"2019-05-27T13:39:44.000Z","updatedAt":"2020-04-21T15:12:40.749Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":115,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":6,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:45.000Z","updatedAt":"2020-04-21T15:12:40.785Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":138,"name":"Final Designs","description":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","duration":5,"type":"final-designs","order":4,"plannedText":"We will design the remaining screens with the feedback from the 5 designs you selected. Once the designs are completed, you will see them here. You'll then choose your 3 favorite options.","activeText":"Our designers are hard at work, incorporating your feedback and designing the remaining screens. We will update this milestone once the progress bar reaches 100%, and you'll see all the links available below.","completedText":"You've selected the winning designs! This concludes the final design milestone.","blockedText":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T05:53:47.000Z","updatedAt":"2020-04-21T15:12:40.825Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":109,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":8,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:41.000Z","updatedAt":"2020-04-21T15:12:40.857Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":118,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":2,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:47.000Z","updatedAt":"2020-04-21T15:12:40.924Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":117,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":3,"type":"community-work","order":3,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:47.000Z","updatedAt":"2020-04-21T15:12:40.929Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":98,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":5,"plannedText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","activeText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:34.000Z","updatedAt":"2020-04-21T15:12:40.960Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":19,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":9,"plannedText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","activeText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:20:27.000Z","updatedAt":"2020-04-21T15:12:41.003Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"OrgConfig":[],"Form":[{"id":1,"key":"app_new_versioning","version":1,"revision":1,"config":{"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"wizard":{"previousStepVisibility":"none","enabled":true},"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}]},"deletedAt":null,"createdAt":"2019-07-25T07:48:45.000Z","updatedAt":"2020-04-21T15:12:35.839Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":2,"key":"test","version":1,"revision":1,"config":{},"deletedAt":null,"createdAt":"2019-12-27T12:43:08.605Z","updatedAt":"2020-04-21T15:12:35.849Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":3,"key":"dev","version":1,"revision":1,"config":{"test create":"test create"},"deletedAt":null,"createdAt":"2020-04-21T15:10:10.227Z","updatedAt":"2020-04-21T15:12:35.849Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":4,"key":"app_new_workstreams","version":1,"revision":1,"config":{"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"wizard":{"previousStepVisibility":"none","enabled":true},"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}]},"deletedAt":null,"createdAt":"2019-07-27T03:43:24.000Z","updatedAt":"2020-04-21T15:12:35.849Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"PlanConfig":[{"id":1,"key":"app_new_workstreams","version":1,"revision":1,"config":{"workstreamsConfig":{"workstreams":[{"name":"Design Workstream","type":"development"},{"name":"Development Workstream","type":"development"},{"name":"QA Workstream","type":"qa"},{"name":"Deployment Workstream"}],"projectFieldName":"details.appDefinition.deliverables","workstreamTypesToProjectValues":{"qa":["dev-qa"],"development":["dev-qa"],"design":["design"],"deployment":["deployment"]}}},"deletedAt":null,"createdAt":"2019-07-27T04:16:41.000Z","updatedAt":"2020-04-21T15:12:35.899Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":2,"key":"dev","version":1,"revision":1,"config":{"test create":"test create"},"deletedAt":null,"createdAt":"2020-04-21T15:09:47.097Z","updatedAt":"2020-04-21T15:12:35.903Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"PriceConfig":[{"id":1,"key":"dev","version":1,"revision":1,"config":{"test create":"test create"},"deletedAt":null,"createdAt":"2020-04-21T15:11:05.889Z","updatedAt":"2020-04-21T15:12:35.939Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"BuildingBlock":[],"Project":[{"id":1,"directProjectId":null,"billingAccountId":null,"name":"Talent as a Service","description":null,"external":null,"bookmarks":[],"utm":null,"estimatedPrice":null,"actualPrice":null,"terms":[],"type":"talent-as-a-service","status":"in_review","details":{"intakePurpose":"demo-test-other","utm":{},"taasDefinition":{"deliverables":["newProject","existingProject"],"help":{"brief":"Description..."},"team":{"skills":[{"id":404,"name":"Zepto.js"},{"id":433,"name":"kraken.js"},{"id":315,"name":"React.js"}]},"tools":["github","gitlab"],"resourceHours":"12","partTimeresourceHours":"34","resourceDuration":"rangeTwo","kickOffTime":"rangeOne","otherRequirements":["specificBackgroundChecks"]},"hideDiscussions":true},"challengeEligibility":[],"cancelReason":null,"templateId":225,"deletedAt":null,"createdAt":"2020-04-21T15:18:31.046Z","updatedAt":"2020-04-21T15:18:31.048Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"version":"v3","lastActivityAt":"2020-04-21T15:18:31.018Z","lastActivityUserId":"40152856"},{"id":2,"directProjectId":null,"billingAccountId":null,"name":"Design, Development & Deployment","description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.\n","external":null,"bookmarks":[],"utm":null,"estimatedPrice":null,"actualPrice":null,"terms":[],"type":"scoped-solutions","status":"active","details":{"intakePurpose":"demo-test-other","utm":{"code":"topcoder"},"appDefinition":{"deliverables":["design","dev-qa","deployment"],"designGoal":"comprehensive-designs","needAdditionalScreens":"yes","screensCount":"30-45","targetDevices":["mobile","tablet","web-browser"],"mobilePlatforms":["ios","android"],"webBrowserBehaviour":"responsive","nativeHybrid":"hybrid","hasBrandGuidelines":"yes","needSpecificFonts":"yes","needSpecificColors":"yes","deploymentTargets":["apple-app-store","google-play","internal-production-environment"]},"techstack":{"hasLanguagesPref":true,"hasFrameworksPref":true,"hasDatabasePref":true},"apiDefinition":{},"hideDiscussions":true},"challengeEligibility":[],"cancelReason":null,"templateId":221,"deletedAt":null,"createdAt":"2020-04-21T15:20:14.525Z","updatedAt":"2020-04-21T15:23:22.271Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"version":"v3","lastActivityAt":"2020-04-21T15:20:14.512Z","lastActivityUserId":"40152856"}],"ProjectPhase":[{"id":1,"name":"Dev Iteration","description":null,"requirements":null,"status":"draft","startDate":"2020-04-21T00:00:00.000Z","endDate":"2020-05-15T00:00:00.000Z","duration":25,"budget":0,"spentBudget":0,"progress":0,"details":{},"order":null,"deletedAt":null,"createdAt":"2020-04-21T15:18:31.091Z","updatedAt":"2020-04-21T15:18:31.091Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"projectId":1},{"id":2,"name":"Development Iteration (3 Milestones)","description":null,"requirements":null,"status":"active","startDate":"2020-04-21T00:00:00.000Z","endDate":"2020-05-10T00:00:00.000Z","duration":20,"budget":0,"spentBudget":0,"progress":0,"details":{},"order":null,"deletedAt":null,"createdAt":"2020-04-21T15:20:52.510Z","updatedAt":"2020-04-21T15:23:21.905Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"projectId":2}],"PhaseProduct":[{"id":1,"name":"Development Iteration (5 Milestones)","projectId":1,"directProjectId":null,"billingAccountId":null,"templateId":29,"type":null,"estimatedPrice":0,"actualPrice":0,"details":{},"deletedAt":null,"createdAt":"2020-04-21T15:18:31.099Z","updatedAt":"2020-04-21T15:18:31.099Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"phaseId":1},{"id":2,"name":"Development Iteration (3 Milestones)","projectId":2,"directProjectId":null,"billingAccountId":null,"templateId":27,"type":"development-iteration-3-milestones","estimatedPrice":0,"actualPrice":0,"details":{},"deletedAt":null,"createdAt":"2020-04-21T15:20:52.531Z","updatedAt":"2020-04-21T15:20:52.531Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"phaseId":2}],"ProjectAttachment":[],"ProjectMember":[{"id":1,"userId":40152856,"role":"manager","isPrimary":true,"deletedAt":null,"createdAt":"2020-04-21T15:18:31.047Z","updatedAt":"2020-04-21T15:18:31.065Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"projectId":1},{"id":2,"userId":40152856,"role":"manager","isPrimary":true,"deletedAt":null,"createdAt":"2020-04-21T15:20:14.526Z","updatedAt":"2020-04-21T15:20:14.537Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"projectId":2},{"id":3,"userId":40152855,"role":"copilot","isPrimary":false,"deletedAt":null,"createdAt":"2020-04-21T15:21:46.569Z","updatedAt":"2020-04-21T15:21:46.570Z","deletedBy":null,"createdBy":40159127,"updatedBy":40159127,"projectId":2},{"id":4,"userId":40152922,"role":"customer","isPrimary":false,"deletedAt":null,"createdAt":"2020-04-21T15:22:52.922Z","updatedAt":"2020-04-21T15:22:52.923Z","deletedBy":null,"createdBy":40152922,"updatedBy":40152922,"projectId":2}],"ProjectMemberInvite":[{"id":1,"projectId":1,"userId":40152922,"email":null,"role":"customer","status":"pending","createdAt":"2020-04-21T15:18:57.303Z","updatedAt":"2020-04-21T15:18:57.303Z","deletedAt":null,"createdBy":40152856,"updatedBy":40152856,"deletedBy":null},{"id":2,"projectId":1,"userId":40152855,"email":null,"role":"copilot","status":"requested","createdAt":"2020-04-21T15:19:08.973Z","updatedAt":"2020-04-21T15:19:08.973Z","deletedAt":null,"createdBy":40152856,"updatedBy":40152856,"deletedBy":null},{"id":4,"projectId":2,"userId":40152855,"email":null,"role":"copilot","status":"request_approved","createdAt":"2020-04-21T15:21:22.298Z","updatedAt":"2020-04-21T15:21:46.555Z","deletedAt":null,"createdBy":40152856,"updatedBy":40152856,"deletedBy":null},{"id":3,"projectId":2,"userId":40152922,"email":null,"role":"customer","status":"accepted","createdAt":"2020-04-21T15:21:08.372Z","updatedAt":"2020-04-21T15:22:52.905Z","deletedAt":null,"createdBy":40152856,"updatedBy":40152856,"deletedBy":null}]} \ No newline at end of file +{"ProjectTemplate":[{"id":56,"name":"QA & Bug Fixes","key":"generic-1","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"icon","question":"question","info":"info","aliases":["xxx-1","kxxx-2","key-2","key0-4"],"scope":{},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-11T03:06:02.000Z","updatedAt":"2020-05-05T09:59:37.355Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":72,"name":"Test Project Intake Dev","key":"test_dev_v2_conditional_options","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_dependent_questions_v2_conditional_options","test-dependent-questions-v2-conditional-options"],"scope":{"wizard":{"previousStepVisibility":"readOnly","enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group"},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group"},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox"},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox"}],"description":"","wizard":{"enabled":false},"id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group"},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox"},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"condition":"details.appDefinition.automatedTestingRequired == true","label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"disableCondition":"details.appDefinition.automatedTestingRequired == true","label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"disableCondition":"details.appDefinition.specificDevices contains 'ios'","label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group"},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox"}],"description":"","id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Design Specs Notes","type":"notes"}],"description":"Please answer a few basic questions about your design specs.","wizard":{"enabled":true},"id":"designSpecification","title":"Design Specs","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-19T04:04:56.000Z","updatedAt":"2020-05-05T09:59:37.354Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":8,"name":"Other Design","key":"generic_design","category":"wireframes","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-other.svg","question":"Other Design","info":"Get help with other types of design","aliases":["generic-design","generic_design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","icon":"question","description":"Brief Description","id":"projectInfo","title":"Description","type":"textbox","required":true,"validationError":"Please provide a description"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Other Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-21T12:16:10.000Z","updatedAt":"2020-05-05T09:59:37.356Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":214,"name":"DS Sprint test","key":"ds_sprint_test","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"ds-sprint","question":"DS Sprint","info":"Data Science Sprint","aliases":["ds_sprint_test"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"7754","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"7641","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"6913","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"9938","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"1374","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"5437","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Sprint"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsSprint.problemStatement","icon":"question","description":"","title":"Describe the problem you would like to solve or the concept you would like to explore.","type":"textbox","summaryTitle":"Problem Concept","required":true,"validationError":"Please, provide problem statement/concept for your project"},{"fieldName":"details.dsSprint.goals","icon":"question","description":"","title":"Expanding on your answer above, what are the one or two most important goals this project should achieve?","type":"textbox","summaryTitle":"Project Goals","required":true,"validationError":"Please, provide goals for your project"},{"fieldName":"details.dsSprint.problemDesc","icon":"question","description":"","title":"Provide a descriptive background of the problem.","type":"textbox","summaryTitle":"Problem Description","required":true,"validationError":"Please, provide descriptive background for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.academicPapers","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Are there academic papers or other sources that should be considered as inputs for your project?","type":"radio-group","summaryTitle":"Academic Papers"},{"condition":"(details.dsSprint.academicPapers == 'yes')","fieldName":"details.dsSprint.urls","icon":"question","description":"","theme":"light","title":"Please list URLs to academic papers or other sources. ","type":"textbox","summaryTitle":"Academic URLs","required":true,"validationError":"Please, provide URLs to your academic papers"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"academicPapers","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.preferredTech","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technologies that should be used for development?","type":"radio-group","summaryTitle":"Do you have Preferred Technology"},{"condition":"( details.dsSprint.preferredTech == 'yes')","fieldName":"details.dsSprint.preferredTechnologies","icon":"question","options":[{"label":"Python","value":"python"},{"label":"R and derivatives","value":"rDerivatives"},{"label":"Jupyter Notebook","value":"jupyter"},{"label":"Java","value":"java"},{"label":"C++","value":"cpp"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"Indicate your preferred technologies","type":"checkbox-group","summaryTitle":"Preferred Technology","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the preffered technologies","required":true},{"condition":"details.dsSprint.preferredTechnologies contains 'other'","fieldName":"details.dsSprint.techPlatforms","icon":"question","description":"","title":"Describe which technologies or platforms you’d like to use","type":"textbox","summaryTitle":"Other Technologies","validationError":"Please, provide technologies or platforms you’d like to use"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"preferredTechnology","type":"questions"},{"hideTitle":true,"questions":[{"condition":"!(details.dsSprint.preferredTechnologies hasLength 0)","fieldName":"details.dsSprint.selectedTechRequired","icon":"question","options":[{"description":"","label":"Required","value":"required"},{"description":"","label":"Optional","value":"optional"}],"description":"","theme":"light","title":"Are the selected technologies required, or optional?","type":"radio-group","summaryTitle":"Technologies Required/Optional ?"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"selectedTechRequired","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.openSourceLibraries","icon":"question","options":[{"description":"","label":"Open source is acceptable","value":"openSourceAcceptable"},{"description":"","label":"Open source is acceptable in general but I want to approve specific libraries","value":"openSourceSpecificLibraries"},{"description":"","label":"Open source is not acceptable","value":"openSourceUnacceptable"}],"description":"","theme":"light","title":"By default, Topcoder will employ open source libraries when the use of them improves outcome or speed.","type":"radio-group","summaryTitle":"Open Source","introduction":"Please indicate your preference for open source libraries."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"openSourceLibraries","type":"questions"},{"hideTitle":true,"questions":[{"minLabel":"See Many Concepts","fieldName":"details.dsSprint.outcome","max":100,"icon":"question","description":"","title":"What outcome is more important?","type":"slider-standard","summaryTitle":"Outcome","maxLabel":"See Best Implementations","required":true,"validationError":"Please provide expected hours of execution","min":1,"theme":"light","step":1,"introduction":"Topcoder’s deliverables can be adjusted to produce many concepts exploring possible solutions to a problem, or to produce focused proofs of concept based on a given technology stack or problem statement. Drag the tab below towards the most appropriate answer."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"outcome","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.dataAvailable","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have data that you can provide?","type":"radio-group","summaryTitle":"Data Available"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataFormat","icon":"question","description":"","title":"Describe the data’s format, size, and the steps you’ll need to take to share it.","type":"textbox","summaryTitle":"Data format & other details"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.pIIData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data contain PII?","type":"radio-group","summaryTitle":"PII Data"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataModifications","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data need to be further obfuscated or privatized","type":"radio-group","summaryTitle":"Data Obfuscated/Privatized"},{"condition":"(details.dsSprint.dataModifications == 'yes')","fieldName":"details.dsSprint.dataModificationsDesc","icon":"question","description":"","theme":"light","title":"Briefly describe the additional obfuscation/privatization required.","type":"textbox","summaryTitle":"Obfuscation/Privatization Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria for deciding winning options"},{"fieldName":"details.dsSprint.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Sprint","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-07-12T11:10:05.000Z","updatedAt":"2020-05-05T09:59:37.357Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":110,"name":"Development","key":"kubik_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Zurich Mobile App","aliases":["kubik_mobile","kubik-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Briefly describe the application we are developing.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Application Overview","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS mobile application","value":"ios"},{"label":"Android mobile application","value":"android"},{"label":"Desktop web browser application - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"web"},{"label":"Responsive web application - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive"},{"label":"Progressive Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome, but that provides a native mobile app experience (rich features, i.e access device features such as GPS).","value":"progressive"},{"label":"Other","value":"other"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.appType1","icon":"question","options":[{"label":"Native - An app built for phones or tablets using native iOS or Android (vs. a hybrid framework such has Ionic).","value":"native"},{"label":"Hybrid - An app built for phones or tablets using a hybrid framework such has Ionic.","value":"hybrid"}],"description":"","title":"If you need a mobile application, please indicate if it should be native or hybrid ","type":"checkbox-group","required":false,"validationError":"Please let us know the app type"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet Device - Portrait","value":"tablet-device-portrait"},{"label":"Tablet Device - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"If you need a mobile application, please indicate the devices you require the application to work on.","type":"checkbox-group"},{"fieldName":"details.appDefinition.admin","icon":"question","options":[{"label":"Yes","value":"admin-yes"},{"label":"No","value":"admin-no"}],"description":"","title":"Will your application require an admin interface?","type":"radio-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Test Data - Should we create test data as part of the project, or will you provide obfuscated test data?","value":"testdata"},{"label":"User Count - How many users do you anticipate the application will have?","value":"usercount"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$50K","value":"upto-50"},{"title":"$75K","value":"upto-75"},{"title":"$100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T19:30:14.000Z","updatedAt":"2020-05-05T09:59:37.356Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":11,"name":"Development Integration","key":"generic_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"Development Integration","info":"Get help with any part of your app or software","aliases":["generic-development","generic_dev","stest"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Development Integration","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]},"2-dev-iteration-ii":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-22T05:46:23.000Z","updatedAt":"2020-05-05T09:59:37.360Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":26,"name":"Zurich Website","key":"website-default","category":"website","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-website.svg","question":"What do you need to Develop?","info":"Design and build the high-impact pages for your blog, online store, or company","aliases":["kubik-website","kubik_website"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"Desktop Web App - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"web"},{"label":"Responsive Web App - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive"},{"label":"Other Software - Any other type of software (i.e backend development, API development, etc.)","value":"other"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"}],"description":"Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions","title":"Style Guide & Brand Guidelines","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.sfdc","title":"SFDC","type":"textbox"},{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"technology-requirements","title":"Technology Requirements","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"Test Data - Should we create test data as part of the project, or will you provide obfuscated test data?","value":"testdata"},{"label":"User Count - How many users do you anticipate the application will have?","value":"usercount"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Website Development","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"Website Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-13T10:54:47.000Z","updatedAt":"2020-05-05T09:59:37.360Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":118,"name":"API","key":"api_development_new","category":"app_dev","subCategory":null,"metadata":{},"icon":"api","question":"what","info":"why","aliases":["api_development_new","api-development-new"],"scope":{"buildingBlocks":{"FREE_SIZE_API_GATEWAY_NO_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"4868","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NOT_NEEDED )"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"api-development","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-development"},"price":"2507","minTime":10,"conditions":"( HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"FREE_SIZE_API_DEVELOPMENT_NO_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"1952","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NOT_NEEDED )"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"api-integration","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-integration"},"price":"7287","minTime":7,"conditions":"( HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"FREE_SIZE_API_GATEWAY_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"5762","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NEEDED )"},"FREE_SIZE_API_INTEGRATION_NO_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"9911","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NOT_NEEDED )"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"api-development","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-development"},"price":"8116","minTime":10,"conditions":"( HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_API_INTEGRATION_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"4772","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NEEDED )"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"api-integration","addonLocation":"details.apiDefinition.addons.api","addonProductKey":"additional-api-integration"},"price":"5156","minTime":7,"conditions":"( HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_API_DEVELOPMENT_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"1802","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NEEDED )"}},"preparedConditions":{"HAS_API_INTEGRATION_ADDON":"(details.apiDefinition.addons.api contains '{\"productKey\":\"additional-api-integration\"}')","HAS_API_DEVELOPMENT_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-development')","ONE_DELIVERABLE":"( 1 == 1)","HAS_API_INTEGRATION_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-integration')","CA_NEEDED":"(details.apiDefinition.caNeeded == 'yes')","HAS_API_DEVELOPMENT_ADDON":"(details.apiDefinition.addons.api contains '{\"productKey\":\"additional-api-development\"}')","HAS_API_GATEWAY_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-gateway-dev-integration')","CA_NOT_NEEDED":"(details.apiDefinition.caNeeded != 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["FREE_SIZE_API_GATEWAY_NO_CA"],["FREE_SIZE_API_GATEWAY_CA"],["FREE_SIZE_API_INTEGRATION_NO_CA"],["FREE_SIZE_API_INTEGRATION_CA"],["FREE_SIZE_API_DEVELOPMENT_NO_CA"],["FREE_SIZE_API_DEVELOPMENT_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Describe the objectives of your API project in 2-3 sentences.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"API"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

API Gateway Development & Integration utilizes open source tools (Kong, Tyk and API Umbrella) to handle multiple APIs and correctly route/orchestrate multiple API requests. This solution does not include the development of APIs, only the gateway development and integration of up to 5 APIs. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Integration solutions cover integration of up to 5 APIs with a third party API management platform, such as Mulesoft, Apigee, Azure API Management, and AWS API Gateway. This solution does not include the development of APIs, only the integration. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Developmentsolutions cover the development of one API for an existing application. The app does not need to have been built by Topcoder. If you require development of more than one API, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

"},"fieldName":"details.apiDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Gateway Development","description":"Uses open source solutions to handle multiple APIs and correctly route/orchestrate multiple API requests.","label":"API Gateway Development & Integration","value":"api-gateway-dev-integration"},{"summaryLabel":"API Integration","description":"Integrate up to 5 APIs with a third party API management platform.","label":"API Integration","value":"api-integration"},{"summaryLabel":"API Development","description":"Development of 1 API for an existing application. The app does not need to have been built by Topcoder.","label":"API Development","value":"api-development"}],"description":"","theme":"light","validations":"isRequired","title":"What type of API support do you need?","type":"radio-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.description","icon":"question","description":"","title":"Describe your existing APIs.","type":"textbox","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.apiTypes","icon":"question","options":[{"label":"REST","value":"rest"},{"label":"SOAP","value":"soap"},{"label":"RPC","value":"rpc"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What type of APIs do you have?","type":"checkbox-group","summaryTitle":"Existing API Types"},{"condition":"( details.existingAPIDetails.apiTypes contains 'other' )","fieldName":"details.existingAPIDetails.otherAPITypeDetails","icon":"question","description":"","title":"Please describe your APIs","type":"textbox","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.existingAPIDetails.hasEventingSupport == 'yes' )","fieldName":"details.existingAPIDetails.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs use any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.existingAPIDetails.hasLoggingErrorFrameworks == 'yes' )","fieldName":"details.existingAPIDetails.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' )","fieldName":"details.existingAPIDetails.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a technology stack preference?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.existingAPIDetails.hasTechStackPref == 'yes' )","fieldName":"details.existingAPIDetails.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.integrationWith","icon":"question","description":"","title":"What API Gateway should your APIs integrate with?","type":"textbox","summaryTitle":"Integrate With"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.description","icon":"question","description":"","title":"Describe the existing application for which we are developing an API.","type":"textbox","summaryTitle":"Existing Application"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasGateway","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Gateway?","type":"radio-group","summaryTitle":"Gateway"},{"condition":"( details.existingAppDetails.hasGateway == 'yes' )","fieldName":"details.existingAppDetails.gatewayDetails","icon":"question","description":"","title":"Describe your API Gateway","type":"textbox","summaryTitle":"Gateway"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasAPIManager","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Manager?","type":"radio-group","summaryTitle":"API Manager"},{"condition":"( details.existingAppDetails.hasAPIManager == 'yes' )","fieldName":"details.existingAppDetails.apiManagerDetails","icon":"question","description":"","title":"Describe your API Manager","type":"textbox","summaryTitle":"API Manager"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.docStandardPref","icon":"question","options":[{"description":"","label":"Use Topcoder’s standard, OpenAPI","value":"topcoder-standard"},{"description":"","label":"Use an alternate documentation method","value":"other-standard"}],"description":"","theme":"light","title":"What is your preference on API documentation?","type":"radio-group","summaryTitle":"Documentation Standard"},{"condition":"( details.existingAppDetails.docStandardPref == 'other-standard' )","fieldName":"details.existingAppDetails.otherDocStandard","icon":"question","description":"","title":"Describe your desired documentation method","type":"textbox","summaryTitle":"Documentation Method"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.apiConsumers","icon":"question","description":"","title":"Describe the consumers of the API.","type":"textbox","summaryTitle":"API Consumers"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technology stack?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.hasTechStackPref == 'yes' )","fieldName":"details.apiDefinition.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API need to support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.apiDefinition.needEventingSupport == 'yes' )","fieldName":"details.apiDefinition.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API require any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.apiDefinition.needLoggingErrorFrameworks == 'yes' )","fieldName":"details.apiDefinition.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"fieldName":"details.apiDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.apiDefinition.addons.api","allowMultiple":true,"icon":"question","description":"Need more than 5 APIs developed or integrated?","theme":"light","title":"API add-ons","type":"add-ons","category":"api"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-14T04:52:53.000Z","updatedAt":"2020-05-05T09:59:37.359Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":105,"name":"Prepared conditions","key":"prepared-conditions","category":"app","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"test","aliases":["prepared-conditions"],"scope":{"preparedConditions":{"TARGET_DEVICE_MOBILE":"( details.appDefinition.targetDevices contains 'mobile' )","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","DESIGN_GOAL_CONCEPT_DESIGN":"( details.appDefinition.designGoal == 'concept-designs' )","TARGET_DEVICE_TABLET":"( details.appDefinition.targetDevices contains 'tablet' )","HAS_DEV_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","WANNA_MOBILE_APP":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )"},"basePriceEstimate":21000,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"App Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_QA_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_QA_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_QA_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_QA_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"DESIGN_GOAL_CONCEPT_DESIGN","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"summaryLabel":"3 days","minTimeUp":0,"description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days","maxTimeUp":0},{"summaryLabel":"7 days","minTimeUp":3,"description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days","maxTimeUp":3}],"description":"","theme":"light","validations":"isRequired","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","validationError":"Please, choose your time expectations.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"TARGET_DEVICE_MOBILE || TARGET_DEVICE_TABLET","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"WANNA_MOBILE_APP","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Does your app need to be Native or Hybrid?","type":"radio-group"},{"help":{"linkTitle":"What is responsive?","title":"What is responsive?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Should your web app be progressive or responsive?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'qa')","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'deployment')","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"}],"baseTimeEstimateMax":6},"phases":{"1-dev-iteration-i":{"duration":24,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-23T07:18:51.000Z","updatedAt":"2020-05-05T09:59:37.358Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":69,"name":"Test Project Intake Dev","key":"test_dev_v2_none","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_dependent_questions_v2_none","test-dependent-questions-v2-none"],"scope":{"wizard":{"previousStepVisibility":"none","enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Names","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group"},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group"},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox"},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox"}],"description":"","wizard":{"enabled":false},"id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","wizard":{"enabled":false},"id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group"},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox"},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group"},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox"},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox"}],"description":"","wizard":{"enabled":true},"id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Design Specs Notes","type":"notes"}],"description":"Please answer a few basic questions about your design specs.","wizard":{"enabled":true},"id":"designSpecification","title":"Design Specs","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-15T04:55:18.000Z","updatedAt":"2020-05-05T09:59:37.359Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":106,"name":"Design","key":"zurich_visual_design_prod","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-app-visual.svg","question":"Visual Design","info":"Create development-ready designs","aliases":["kubik_design","kubik-design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"layout":{"spacing":"codes","direction":"vertical"},"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Briefly describe the application we are designing.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true},{"layout":"vertical","fieldName":"details.loadDetails.designType","icon":"question","options":[{"label":"Concept exploration (Recommended use: when you are looking to quickly explore concepts for an application or website through designs, but are not ready to begin development yet)","value":"concept-exploration"},{"label":"Full application designs (Recommended use: when you need detailed, development-ready designs)","value":"full-application-designs"}],"description":"","title":"Do you need concept exploration design or full application designs that can be development-ready?","type":"radio-group","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"icon":"NumberText","title":"screens","value":"2-4","desc":""},{"iconOptions":{"number":"5-8"},"icon":"NumberText","title":"screens","value":"5-8","desc":""},{"iconOptions":{"number":"9-15"},"icon":"NumberText","title":"screens","value":"9-15","desc":""}],"description":"Please select required option for the total amount of screens/features. If you need more than 15 screens, please indicate this in the Notes section.","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.deviceType","icon":"question","options":[{"label":"Mobile","value":"mobile"},{"label":"Tablet","value":"tablet"},{"label":"Web Browser","value":"web-browser"}],"description":"","title":"Where should your app work?","type":"checkbox-group"},{"fieldName":"details.appDefinition.osType","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"}],"description":"","title":"If you selected Mobile or Tablet in the previous question, please indicate your application type (Optional Question)","type":"checkbox-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"}],"description":"","title":"","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $5K ","value":"upto-5"},{"title":"$10K","value":"upto-10"},{"title":"$15K","value":"upto-15"},{"title":"$20K","value":"upto-20"},{"title":"$25K","value":"upto-25"},{"title":"$25K+","value":"above-25"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"3 Days","value":"3-days"},{"title":"6 Days","value":"6-days"},{"title":"9 Days","value":"9-days"},{"title":"12 Days","value":"12-days"},{"title":"15 Days","value":"15-days"},{"title":"19 Days","value":"19-days"},{"title":"22 Days","value":"22-days"},{"title":"25 Days","value":"25-days"},{"title":"25+ Days","value":"above-25-days"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T10:03:30.000Z","updatedAt":"2020-05-05T09:59:37.361Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":104,"name":"Design, Development & Deployment","key":"app_new","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"Create high-quality designs, develop and/or deploy your app or website","aliases":["app_new","app-new"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2291","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"5426","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3230","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"4988","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"9643","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"1003","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"2855","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"1839","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5749","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2668","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7296","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"5313","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6121","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3077","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5750","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9121","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"1422","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"216","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9149","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"9433","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"2830","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9798","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6938","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6759","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"2417","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"843","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"7643","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3672","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"681","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"5922","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"9344","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2096","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9506","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"7248","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"815","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4037","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9132","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2854","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8189","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6165","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2790","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"369","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"3926","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6473","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"9452","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9572","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5725","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9682","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"4277","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5281","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4752","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5238","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"577","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9020","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6523","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4679","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8601","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"8272","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9975","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"6978","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9168","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"4571","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"7404","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"7822","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8392","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2802","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4114","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5589","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5907","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8582","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"4955","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7271","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1622","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"8060","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7027","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7812","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"4634","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1635","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3655","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"8052","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"6950","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3515","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5019","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7377","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"359","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"302","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"9980","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"264","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3681","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"9925","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8448","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"5770","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9671","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5751","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"645","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"1346","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"1383","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"8762","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2693","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"2090","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5319","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"4721","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"9323","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"5371","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9523","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"8028","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"866","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"875","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"481","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9101","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"8262","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"4183","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3325","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5263","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"9882","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6797","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"5743","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.progressiveResponsive","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-22T08:55:04.000Z","updatedAt":"2020-05-05T09:59:37.357Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":119,"name":"API","key":"test1_api_template_new","category":"app_dev","subCategory":null,"metadata":{},"icon":"api","question":"what","info":"why","aliases":["test1_api_template_new"],"scope":{"buildingBlocks":{"FREE_SIZE_API_GATEWAY_NO_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"7411","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NOT_NEEDED )"},"FREE_SIZE_API_DEVELOPMENT_NO_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"5698","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NOT_NEEDED )"},"FREE_SIZE_API_GATEWAY_CA":{"maxTime":54,"metadata":{"deliverable":"api-gateway-dev-integration"},"price":"3065","minTime":54,"conditions":"( HAS_API_GATEWAY_DELIVERABLE && CA_NEEDED )"},"FREE_SIZE_API_INTEGRATION_NO_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"1721","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NOT_NEEDED )"},"FREE_SIZE_API_INTEGRATION_CA":{"maxTime":34,"metadata":{"deliverable":"api-integration"},"price":"8350","minTime":34,"conditions":"( HAS_API_INTEGRATION_DELIVERABLE && CA_NEEDED )"},"FREE_SIZE_API_DEVELOPMENT_CA":{"maxTime":33,"metadata":{"deliverable":"api-development"},"price":"9071","minTime":33,"conditions":"( HAS_API_DEVELOPMENT_DELIVERABLE && CA_NEEDED )"}},"preparedConditions":{"HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_API_DEVELOPMENT_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-development')","ONE_DELIVERABLE":"( 1 == 1)","HAS_API_INTEGRATION_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-integration')","CA_NEEDED":"(details.apiDefinition.caNeeded == 'yes')","HAS_API_GATEWAY_DELIVERABLE":"(details.apiDefinition.deliverables == 'api-gateway-dev-integration')","CA_NOT_NEEDED":"(details.apiDefinition.caNeeded != 'yes')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["FREE_SIZE_API_GATEWAY_NO_CA"],["FREE_SIZE_API_GATEWAY_CA"],["FREE_SIZE_API_INTEGRATION_NO_CA"],["FREE_SIZE_API_INTEGRATION_CA"],["FREE_SIZE_API_DEVELOPMENT_NO_CA"],["FREE_SIZE_API_DEVELOPMENT_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Describe the objectives of your API project in 2-3 sentences.","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"API"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

API Gateway Development & Integration utilizes open source tools (Kong, Tyk and API Umbrella) to handle multiple APIs and correctly route/orchestrate multiple API requests. This solution does not include the development of APIs, only the gateway development and integration of up to 5 APIs. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Integration solutions cover integration of up to 5 APIs with a third party API management platform, such as Mulesoft, Apigee, Azure API Management, and AWS API Gateway. This solution does not include the development of APIs, only the integration. If you require integration of more than 5 APIs, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

API Developmentsolutions cover the development of one API for an existing application. The app does not need to have been built by Topcoder. If you require development of more than one API, please indicate this in the comments section of the form prior to submitting and we will include this estimate in the detailed proposal.

"},"fieldName":"details.apiDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Gateway Development","description":"Uses open source solutions to handle multiple APIs and correctly route/orchestrate multiple API requests.","label":"API Gateway Development & Integration","value":"api-gateway-dev-integration"},{"summaryLabel":"API Integration","description":"Integrate up to 5 APIs with a third party API management platform.","label":"API Integration","value":"api-integration"},{"summaryLabel":"API Development","description":"Development of 1 API for an existing application. The app does not need to have been built by Topcoder.","label":"API Development","value":"api-development"}],"description":"","theme":"light","validations":"isRequired","title":"What type of API support do you need?","type":"radio-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.description","icon":"question","description":"","title":"Describe your existing APIs.","type":"textinput","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.apiTypes","icon":"question","options":[{"label":"REST","value":"rest"},{"label":"SOAP","value":"soap"},{"label":"RPC","value":"rpc"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What type of APIs do you have?","type":"checkbox-group","summaryTitle":"Existing API Types"},{"condition":"( details.existingAPIDetails.apiTypes contains 'other' )","fieldName":"details.existingAPIDetails.otherAPITypeDetails","icon":"question","description":"","title":"Please describe your APIs","type":"textbox","summaryTitle":"Existing APIs"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.existingAPIDetails.hasEventingSupport == 'yes' )","fieldName":"details.existingAPIDetails.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' ) || ( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.hasLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do the APIs use any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.existingAPIDetails.hasLoggingErrorFrameworks == 'yes' )","fieldName":"details.existingAPIDetails.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"},{"condition":"( details.apiDefinition.deliverables contains 'api-gateway-dev-integration' )","fieldName":"details.existingAPIDetails.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a technology stack preference?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.existingAPIDetails.hasTechStackPref == 'yes' )","fieldName":"details.existingAPIDetails.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-integration' )","fieldName":"details.existingAPIDetails.integrationWith","icon":"question","description":"","title":"What API Gateway should your APIs integrate with?","type":"textbox","summaryTitle":"Integrate With"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.description","icon":"question","description":"","title":"Describe the existing application for which we are developing an API.","type":"textbox","summaryTitle":"Existing Application"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasGateway","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Gateway?","type":"radio-group","summaryTitle":"Gateway"},{"condition":"( details.existingAppDetails.hasGateway == 'yes' )","fieldName":"details.existingAppDetails.gatewayDetails","icon":"question","description":"","title":"Describe your API Gateway","type":"textbox","summaryTitle":"Gateway"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.hasAPIManager","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you use an API Manager?","type":"radio-group","summaryTitle":"API Manager"},{"condition":"( details.existingAppDetails.hasAPIManager == 'yes' )","fieldName":"details.existingAppDetails.apiManagerDetails","icon":"question","description":"","title":"Describe your API Manager","type":"textbox","summaryTitle":"API Manager"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.docStandardPref","icon":"question","options":[{"description":"","label":"Use Topcoder’s standard, OpenAPI","value":"topcoder-standard"},{"description":"","label":"Use an alternate documentation method","value":"other-standard"}],"description":"","theme":"light","title":"What is your preference on API documentation?","type":"radio-group","summaryTitle":"Documentation Standard"},{"condition":"( details.existingAppDetails.docStandardPref == 'other-standard' )","fieldName":"details.existingAppDetails.otherDocStandard","icon":"question","description":"","title":"Describe your desired documentation method","type":"textbox","summaryTitle":"Documentation Method"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.existingAppDetails.apiConsumers","icon":"question","description":"","title":"Describe the consumers of the API.","type":"textbox","summaryTitle":"API Consumers"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.hasTechStackPref","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technology stack?","type":"radio-group","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.hasTechStackPref == 'yes' )","fieldName":"details.apiDefinition.techStackPref","icon":"question","description":"","title":"Describe your preferred technology stack.","type":"textbox","summaryTitle":"Tech Stack"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needEventingSupport","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API need to support eventing?","type":"radio-group","summaryTitle":"Eventing Support"},{"condition":"( details.apiDefinition.needEventingSupport == 'yes' )","fieldName":"details.apiDefinition.eventingDetails","icon":"question","description":"","title":"Describe any eventing details you feel are important to highlight","type":"textbox","summaryTitle":"Existing Eventing Details"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.authStandards","icon":"question","description":"","title":"What standard for authorization and authentication are you using?","type":"textbox","summaryTitle":"Auth standards"},{"condition":"( details.apiDefinition.deliverables contains 'api-development' )","fieldName":"details.apiDefinition.needLoggingErrorFrameworks","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your API require any specific logging or error handling frameworks?","type":"radio-group","summaryTitle":"Logging/Error frameworks"},{"condition":"( details.apiDefinition.needLoggingErrorFrameworks == 'yes' )","fieldName":"details.apiDefinition.loggingErrorFrameworks","icon":"question","description":"","title":"Please describe any specific logging or error handling frameworks you require","type":"textbox","summaryTitle":"Logging/Error Frameworks"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"api-integration-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new customer to Topcoder and need additional help navigating the crowdsourcing process as Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"fieldName":"details.apiDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"api-gateway","deliverableKey":"api-gateway-dev-integration","title":"API Gateway","enableCondition":"HAS_API_GATEWAY_DELIVERABLE"},{"id":"api-integration","deliverableKey":"api-integration","title":"API Integration","enableCondition":"HAS_API_INTEGRATION_DELIVERABLE"},{"id":"api-development","deliverableKey":"api-development","title":"API Development","enableCondition":"HAS_API_DEVELOPMENT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-14T07:38:18.000Z","updatedAt":"2020-05-05T09:59:37.361Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":74,"name":"App","key":"app_new","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new-test","app_new_test"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.appType","affectsQuickQuote":true,"icon":"question","options":[{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"},{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Progressive Web App","value":"progressive-web-app","desc":"Progressive Web Apps"},{"disableCondition":"details.appDefinition.appType contains 'responsive-web-app'","iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"disableCondition":"( details.appDefinition.appType contains 'progressive-web-app' ) || ( details.appDefinition.appType contains 'ios' ) || ( details.appDefinition.appType contains 'android' ) || ( details.appDefinition.appType contains 'desktop' )","iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Responsive Web App","value":"responsive-web-app","desc":"Responsive Web Apps"}],"description":"Select maximum 2 types of app that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.appType contains 'ios' ) || ( details.appDefinition.appType contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"layout":"horizontal","fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"condition":"( details.appDefinition.appType contains 'responsive-web-app' ) || ( details.appDefinition.appType contains 'desktop' )","label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What devices do you need this for?","type":"checkbox-group"},{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":5013,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":1381,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"iconOptions":{"number":"9-15"},"price":1183,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development & QA","value":"dev-qa"},{"label":"Design, Development & QA","value":"design-dev-qa"}],"description":"","title":"What kind of deliverables do you need?","type":"radio-group"},{"condition":"( details.appDefinition.deliverables contains 'design' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"I need designs in three days","value":"under-3-days"},{"label":"I need designs in six days","value":"under-6-days"},{"label":"I need a comprehensive design solution","value":"comprehensive-design"}],"description":"","title":"Need a quick turnaround for your designs?","type":"radio-group"},{"condition":"(details.appDefinition.deliverables == 'design' && details.appDefinition.quickTurnaround == 'comprehensive-design')","fieldName":"details.appDefinition.designAddons","icon":"question","description":"","title":"Choose Design add-ons","type":"add-ons","category":"generic","subCategories":["design","qa"]},{"condition":"(details.appDefinition.deliverables == 'dev-qa')","fieldName":"details.appDefinition.devQAAddons","icon":"question","description":"","title":"Choose Dev/QA add-ons","type":"add-ons","category":"generic","subCategories":["dev-qa","security"]},{"condition":"(details.appDefinition.deliverables == 'design-dev-qa')","fieldName":"details.appDefinition.devQAAddons","icon":"question","description":"","title":"Choose Design/Dev/QA add-ons","type":"add-ons","category":"generic","subCategories":["dev-qa","security"]},{"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"},{"fieldName":"details.appDefinition.message","hideTitle":true,"description":"If you are done with requirements for your projects please review and continue to create project.","id":"message","title":"Message","type":"message"}],"description":"","wizard":{"enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-27T10:51:50.000Z","updatedAt":"2020-05-05T09:59:37.361Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":19,"name":"Topgear","key":"topgear_dev","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Topgear","aliases":["topgear_dev","topgear-dev"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.du","icon":"question","description":"","title":"DU","type":"textbox"},{"fieldName":"details.appDefinition.users.projectCode","icon":"question","title":"Project Code","type":"textbox"},{"fieldName":"details.appDefinition.users.cost_center","icon":"question","title":"Cost Center code","type":"textbox"},{"fieldName":"details.appDefinition.users.ng3","icon":"question","title":"Part of NG3","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Topgear Dev","required":true}]},"phases":{"topgear_dev":{"duration":10,"name":"Topgear","products":[{"id":8,"productKey":"topgear_dev"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-09T10:32:26.000Z","updatedAt":"2020-05-05T09:59:37.362Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":111,"name":"Performance Testing","key":"kubik-perf-testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-perf-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group"},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group"},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group"},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group"},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.loadDetails.concurrentUsersCount","icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","title":"What is the desired load of concurrent users on the system?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","title":"Approximately how many business processes/transactions will be included in your Performance Test?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","title":"How many hours do you expect the Performance Test to be executed for?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected hours of execution"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Performance Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T10:12:44.000Z","updatedAt":"2020-05-05T09:59:37.363Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":15,"name":"Salesforce Accelerator","key":"sfdc_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-sfdc-accelerator","question":"What kind of quality assurance (QA) do you need?","info":"SalesForce Testing, Cross browser-device Testing","aliases":["sfdc_testing","sfdc-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief description of your project, Salesforce.com implementation testing objectives","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.components","icon":"question","options":[{"label":"Manual Test packs + Business Models + Automation scripts","value":"pack_one"},{"label":"License for AssureNXT and Tosca for 2 months","value":"pack_two"},{"label":"Customization services to fit the pre-built assets to your specific use cases","value":"pack_three"}],"description":"Full solution will have all the above components, while Partial solution - can have just either the sfdc assets mentioned in option 1 OR SFDC assets + customized service without the license","title":"The Salesforce.com accelerator pack comprises of pre-built test assets and tools/licenses support to enable customization services. Would you like to purchase all the components of the accelerator pack or only a subset of it? (choose all that apply)","type":"checkbox-group","required":true,"validationError":"Please provide the required options"},{"fieldName":"details.appDefinition.functionalities","icon":"question","options":[{"label":"Sales Cloud - Campaign","value":"sales_cloud_campaign"},{"label":"Lead","value":"lead"},{"label":"Account","value":"account"},{"label":"Contact","value":"contact"},{"label":"Opportunity","value":"opportunity"},{"label":"Quote","value":"quote"},{"label":"Contract & Order Management","value":"contract_and_order"},{"label":"Product & Price Book and End to End Processes & Misc Functions (Activites Chatter Reports & Dashboards)","value":"product_price"},{"label":"Service Cloud – Case Management","value":"service_cloud_case_management"}],"description":"","title":"Select the functionalities which are applicable for your Salesforce.com Implementation ( 1 or multiple from the 10 listed below)","type":"checkbox-group"},{"fieldName":"details.appDefinition.lightningExperience.value","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"I Don't Know","value":"Neither"}],"description":"","title":"Are you using the Lightning Experience?","type":"radio-group","required":true}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information such as any existing test automation tool used, known constraints for automation, % of customizations in your Salesforce.com implementation, etc.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later. *AssureNXT - Rapid Test Design Module is a Component of AssureNXT which is a Test Management Platform. It helps in Automated Test Case and Test Data Model generation through business process diagrams. RTD establishes direct relationship between business requirements, process flows and test coverage. Accelerated Test Case generation for changed business process. *Tosca - Tricentis Tosca is a testing tool that is used to automate end-to-end testing for software applications. Tricentis Tosca combines multiple aspects of software testing (test case design, test automation, test data design and generation, and analytics) to test GUIs and APIs from a business perspective","id":"appDefinition","title":"Salesforce Accelerator","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-06T07:38:29.000Z","updatedAt":"2020-05-05T09:59:37.362Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":68,"name":"App","key":"app_new","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new","app_new"],"scope":{"preparedConditions":{"ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && ((details.appDefinition.deliverables hasLength 3) || ((details.appDefinition.deliverables hasLength 4) && (details.appDefinition.deliverables contains 'qa')))","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","QUICK_DESIGN_3_Days":"(details.appDefinition.quickTurnaround == 'under-3-days')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 1)","DESIGN_DEV_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 3)","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","QUICK_DESIGN_6_Days":"(details.appDefinition.quickTurnaround == 'under-6-days')","ONLY_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 1) || ((details.appDefinition.deliverables hasLength 2) && (details.appDefinition.deliverables contains 'qa') ))","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DESIGN_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 2) || ((details.appDefinition.deliverables hasLength 3) && (details.appDefinition.deliverables contains 'qa')))","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 1)","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","ONLY_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables hasLength 1)","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","ONLY_DESIGN_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 2)","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')"},"basePriceEstimate":21000,"priceConfig":{"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":55,"price":4581,"minTime":55},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":9706,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":5380,"minTime":80},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":12,"price":6458,"minTime":12},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":3,"price":8616,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":52,"price":9587,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":65,"price":4603,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":8947,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":7527,"minTime":59},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":19,"price":2560,"minTime":19},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":5003,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":44,"price":3910,"minTime":44},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":12,"price":5503,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":3408,"minTime":59},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":5226,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":5649,"minTime":62},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":40,"price":6517,"minTime":40},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":22,"price":2385,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":65,"price":3635,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":3702,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":5764,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":14,"price":6829,"minTime":14},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":182,"minTime":78},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":52,"price":5744,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":54,"price":4833,"minTime":54},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":2660,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":6628,"minTime":72},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":10,"price":4310,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":3322,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":8451,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":1557,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":5661,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":85,"price":5552,"minTime":85},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":88,"price":3259,"minTime":88},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":50,"price":8412,"minTime":50},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":4820,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":62,"price":5851,"minTime":62},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":12,"price":1976,"minTime":12},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":70,"price":3527,"minTime":70},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)":{"maxTime":40,"price":680,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":9132,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":7914,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":55,"price":4012,"minTime":55},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":5733,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":73,"price":5209,"minTime":73},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":65,"price":5607,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":2221,"minTime":75},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":8033,"minTime":49},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":45,"price":8303,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":3990,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":1469,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":6906,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":60,"price":5684,"minTime":60},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":14,"price":2248,"minTime":14},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":22,"price":1553,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":9784,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":3265,"minTime":72},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":25,"price":5680,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":3444,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":8447,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":8243,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":60,"price":391,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":1313,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":7408,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":93,"price":2222,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":4030,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":1962,"minTime":75},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":7152,"minTime":62},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":8101,"minTime":49},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":9,"price":8229,"minTime":9},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":54,"price":8957,"minTime":54},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":22,"price":1973,"minTime":22},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":25,"price":5980,"minTime":25},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":25,"price":3629,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":9433,"minTime":80},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":40,"price":1388,"minTime":40},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":35,"price":1256,"minTime":35},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":2937,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":5537,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":1863,"minTime":67},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":13,"price":6226,"minTime":13},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":52,"price":1430,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":62,"price":2590,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":73,"price":2377,"minTime":73},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":13,"price":5318,"minTime":13},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":3419,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":8732,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":6321,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":5545,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":3425,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":64,"price":4317,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":5564,"minTime":54},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":50,"price":9861,"minTime":50},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":90,"price":246,"minTime":90},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":1462,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":5238,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":4295,"minTime":57},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":10,"price":6113,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":8249,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":9033,"minTime":72},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":35,"price":9428,"minTime":35},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":1129,"minTime":77},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":3862,"minTime":49},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":45,"price":5216,"minTime":45},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":70,"price":3335,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":5654,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":9240,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":994,"minTime":80},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":12,"price":2741,"minTime":12},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":784,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":60,"price":9981,"minTime":60},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":44,"price":4531,"minTime":44},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NEEDED )":{"maxTime":3,"price":4283,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":270,"minTime":59},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":919,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":6133,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":8674,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":1719,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":6485,"minTime":65},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":40,"price":2077,"minTime":40},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NOT_NEEDED )":{"maxTime":3,"price":5732,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":4334,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":7429,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":7720,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":7756,"minTime":67},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":45,"price":765,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":2410,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":7602,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":85,"price":4175,"minTime":85},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":93,"price":3141,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":47,"price":9325,"minTime":47},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":19,"price":4791,"minTime":19},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":9876,"minTime":54},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":57,"price":2690,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":6862,"minTime":72},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)":{"maxTime":45,"price":177,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":8128,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":88,"price":2123,"minTime":88},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":64,"price":5286,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":5891,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":68,"price":7371,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":6399,"minTime":83},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":40,"price":3339,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":65,"price":10075,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":9214,"minTime":59},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":57,"price":1861,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":1127,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":2171,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":9829,"minTime":57},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NOT_NEEDED )":{"maxTime":6,"price":216,"minTime":6},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":57,"price":9131,"minTime":57},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)":{"maxTime":35,"price":4352,"minTime":35},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":57,"price":2328,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":308,"minTime":67},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NEEDED )":{"maxTime":6,"price":6371,"minTime":6},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":25,"price":2752,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":7531,"minTime":83},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":4736,"minTime":78},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)":{"maxTime":35,"price":4350,"minTime":35},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":52,"price":1976,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":5710,"minTime":70},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)":{"maxTime":45,"price":5486,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":6943,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":4493,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":9,"price":3325,"minTime":9},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":6456,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":47,"price":1857,"minTime":47},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)":{"maxTime":40,"price":6067,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":5474,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":3566,"minTime":75},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":3,"price":3898,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":68,"price":3408,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":7460,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":8899,"minTime":65},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":22,"price":3477,"minTime":22},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":45,"price":5686,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":714,"minTime":80},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":4061,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":9688,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":90,"price":1273,"minTime":90},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":60,"price":7032,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":580,"minTime":54},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":9986,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":9485,"minTime":62}},"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","label":"Design","value":"design"},{"summaryLabel":"Development","label":"App Development","value":"dev-qa"},{"summaryLabel":"QA","label":"QA, Fixes & Enhancements","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed"},{"fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"summaryLabel":"3 days","minTimeUp":0,"description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days","maxTimeUp":0},{"summaryLabel":"7 days","minTimeUp":3,"description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days","maxTimeUp":3}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"layout":"horizontal","condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'ios') )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'android') )","label":"Google Play","value":"google-play"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOnly","enabled":true},"title":"App details","type":"questions"},{"condition":"( (!( details.appDefinition.targetDevices hasLength 1 )) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"fieldName":"details.appDefinition.message","hideTitle":true,"description":"If you are done with requirements for your projects please review and continue to create project.","id":"message","title":"Message","type":"message"}],"wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"project-basic-details","title":"Basic Details"}],"baseTimeEstimateMax":6},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Designs","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-14T11:40:27.000Z","updatedAt":"2020-05-05T09:59:37.362Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":219,"name":"(Workstreams) Design, Development & Deployment","key":"app_new_workstreams","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"Create high-quality designs, develop and/or deploy your app or website","aliases":["app_new_workstreams"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2395","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"9408","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5542","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"1688","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"936","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"8875","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1817","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"1652","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9597","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"1312","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6367","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"6514","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8530","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1595","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1842","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1522","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"9987","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2582","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9104","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"8431","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"4086","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"8746","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6422","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5943","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"783","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"2153","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"4024","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"6624","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5570","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"233","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"5887","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5118","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8433","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"7174","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"4520","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1372","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"502","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2460","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"779","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9823","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1222","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"2973","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"5643","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6611","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"9597","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"5773","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"2063","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2738","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"1716","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2039","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1536","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4876","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4709","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5464","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1709","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5162","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"1763","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"8533","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6179","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"6826","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9815","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"1216","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1868","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8364","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1536","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2160","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8551","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9045","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4050","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1498","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"2534","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5738","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4489","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"10025","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7585","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5151","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"7441","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3605","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5962","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"5274","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7269","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3940","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3023","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"9038","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5114","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4590","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"5127","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"1676","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7433","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"4180","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8574","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"9893","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5007","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5124","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"2363","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"1419","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"6907","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"155","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2775","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"4071","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3475","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"8017","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"3243","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"5737","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"10033","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"107","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9465","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8294","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"9837","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9180","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"4962","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"1898","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1818","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3863","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"7814","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1532","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6381","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"workstreamsConfig":{"workstreams":[{"name":"Design Workstream","type":"design"},{"name":"Development Workstream","type":"development"},{"name":"QA Workstream","type":"qa"},{"name":"Deployment Workstream","type":"deployment"}],"projectFieldName":"details.appDefinition.deliverables","workstreamTypesToProjectValues":{"qa":["dev-qa"],"development":["dev-qa"],"design":["design"],"deployment":["deployment"]}}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-07-28T03:26:00.000Z","updatedAt":"2020-05-05T09:59:37.363Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":112,"name":"Testing Automation","key":"kubik_testing_automation","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-testing-automation"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.testingDetails.testCaseCount","icon":"question","options":[{"title":"Up to 50","value":"upto-50"},{"title":"Up to 100","value":"upto-100"},{"title":"100+","value":"above-100"}],"description":"","title":"How many test cases do you anticipate requiring in your automated test suite?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected number of test cases"},{"condition":"details.testingDetails.testCaseCount == 'above-100'","fieldName":"details.testingDetails.customTestCaseCount","title":"Specify how many test cases you need","type":"numberinput"}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Testing Automation","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T10:43:14.000Z","updatedAt":"2020-05-05T09:59:37.454Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":49,"name":"Test Project Intake Dev","key":"test_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_dependent_questions","test-dependent-questions"],"scope":{"wizard":{"enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox","dependent":true}],"description":"","wizard":{"enabled":true},"id":"application-nformation","title":"Application Information","type":"questions-with-cascade","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","wizard":{"enabled":true},"id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group","dependent":true},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox","dependent":true},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group","dependent":true},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true}],"description":"","wizard":{"enabled":true},"id":"testing-nformation","title":"Testing Information","type":"questions-with-cascade","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Design Specs Notes","type":"notes"}],"description":"Please answer a few basic questions about your design specs.","wizard":{"enabled":false},"id":"designSpecification","title":"Design Specs","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-10T07:03:31.000Z","updatedAt":"2020-05-05T09:59:37.554Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":228,"name":"Development Integration","key":"cs_generic_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"Development Integration","info":"Get help with any part of your app or software","aliases":["cs-generic-development-1"],"scope":{"buildingBlocks":{},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Ideation"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsIdeation.problemStatement","icon":"question","description":"","title":"Please state the problem you would like to solve.","type":"textbox","summaryTitle":"Problem Statement","required":true,"validationError":"Please, provide problem statement/concept for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria you would like to use for deciding winning options."},{"fieldName":"details.dsIdeation.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Ideation","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-12-20T10:41:51.187Z","updatedAt":"2020-05-05T09:59:37.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":59,"name":"Website","key":"website-default","category":"website","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-website.svg","question":"What do you need to Develop?","info":"Design and build the high-impact pages for your blog, online store, or company","aliases":["website-test","website_development_test"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-mobile.svg","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-tablet.svg","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-desktop.svg","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"../../assets/icons/icon-tech-outline-watch-apple.svg","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Website Development","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-11T12:07:41.000Z","updatedAt":"2020-05-05T09:59:37.364Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":17,"name":"Enterprise Mobile","key":"enterprise_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Enterprise Mobile","aliases":["enterprise_mobile","enterprise-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS App - An app built for iPhone or iPads","value":"ios"},{"label":"Android App - An app built for mobile phones or tablets running Android.","value":"android"},{"label":"Hybrid App - An app built using a hybrid framework (ex. Ionic/Cordova/Xamarin) and exported to one or more operating systems (iOS, Android or both).","value":"hybrid"},{"label":"Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome.","value":"web"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet Device - Portrait","value":"tablet-device-portrait"},{"label":"Tablet Device - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"Form Factor/Orientation","type":"checkbox-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.appIcon","title":"Do you need an app icon designed, or will you provide one?","type":"textbox"}],"description":"","title":"Style Guide & Brand Guidelines - Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles - Please use the fields below to specify the type of users/roles for the application. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":" - Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"help-faws"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStack","title":"Technology Stack - Do you have a preferred technology stack? If yes, please list those requirements here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.users","icon":"question","title":"How many users do you intend to support?","type":"textbox","required":false},{"fieldName":"details.qaTesting.data","icon":"question","options":[{"title":"We will provide obfuscated data","value":"create"},{"title":"Topcoder will create data","value":"provide"}],"title":"Do you intend to supply test data or should Topcoder create it?","type":"slide-radiogroup","required":false},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your app by?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-09T10:00:42.000Z","updatedAt":"2020-05-05T09:59:37.363Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":18,"name":"Enterprise Web","key":"enterprise_web","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Enterprise Web","aliases":["enterprise_web","enterprise-web"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"Desktop Web App - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"desktop"},{"label":"Responsive Web App - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive"}],"description":"What type of application are we developing? Please place an X in the Required column for each required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.appIcon","title":"Do you need an app icon designed, or will you provide one?","type":"textbox"}],"description":"","title":"Style Guide & Brand Guidelines - Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles - Please use the fields below to specify the type of users/roles for the application. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":" - Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"help-faws"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStack","title":"Technology Stack - Do you have a preferred technology stack? If yes, please list those requirements here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.users","icon":"question","title":"How many users do you intend to support?","type":"textbox","required":false},{"fieldName":"details.qaTesting.data","icon":"question","options":[{"title":"We will provide obfuscated data","value":"create"},{"title":"Topcoder will create data","value":"provide"}],"title":"Do you intend to supply test data or should Topcoder create it?","type":"slide-radiogroup","required":false},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your app by?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Enterprise Web","required":true}]},"phases":{"enterprise_web":{"duration":10,"name":"Enterprise Web","products":[{"id":7,"productKey":"enterprise_web"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-09T10:25:14.000Z","updatedAt":"2020-05-05T09:59:37.364Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":9,"name":"Front-end","key":"frontend_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-front-end-dev.svg","question":"Front-end Development","info":"Translate your designs into Web or Mobile front-end","aliases":["frontend-development","frontend_dev"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Front-end","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]},"2-dev-iteration-ii":{"duration":25,"name":"Dev Itegration","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-21T12:29:58.000Z","updatedAt":"2020-05-05T09:59:37.364Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":6,"name":"Watson Chatbot","key":"watson_chatbot","category":"chatbot","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-chatbot.svg","question":"Watson Chatbot","info":"Build Chatbot using IBM Watson","aliases":["watson-chatbot"],"scope":{"formTitle":"AI Chatbot with Watson","formDisclaimer":"IBM is receiving compensation from Topcoder for referring customers to Topcoder.","sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.hasBluemixAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do you have an existing IBM Cloud (formerly IBM Bluemix) account?","type":"radio-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.hasChatbot","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Does your organization currently have a chatbot?","type":"radio-group","required":true},{"fieldName":"details.appDefinition.existingChatbotDesc","icon":"question","description":"","title":"If yes, can you provide some brief specifics about your current chatbot?","type":"textbox"},{"fieldName":"details.appDefinition.capabilities","icon":"question","options":[{"label":"Order management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","title":"What capabilities does the chatbot need to support?","type":"checkbox-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.integrationSystems","icon":"question","description":"","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below.","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.existingAgentScripts","icon":"question","description":"","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later).","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.transferToHumanAgents","icon":"question","description":"","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.).","type":"textbox","required":true,"validationError":"Please complete this section"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"Chatbot Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-06-18T07:48:48.000Z","updatedAt":"2020-05-05T09:59:37.455Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":107,"name":"Buzz","key":"Buzz","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"Buzz","question":"Buzz","info":"Buzz","aliases":["buzzz"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"Budget?","title":"Select the budget using Slide Radio Button","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T10:39:57.000Z","updatedAt":"2020-05-05T09:59:37.455Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":25,"name":"Zurich Salesforce Dev","key":"sfdc_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"product-qa-sfdc-accelerator","question":"What kind of development do you need?","info":"SalesForce Project","aliases":["kubik_sfdc_dev","kubik-sfdc-dev"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please briefly explain what type of application we’re building, the problem it solves and what it should do.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.functionalities","icon":"question","options":[{"label":"Sales Cloud - Campaign","value":"sales_cloud_campaign"},{"label":"Lead","value":"lead"},{"label":"Account","value":"account"},{"label":"Contact","value":"contact"},{"label":"Opportunity","value":"opportunity"},{"label":"Quote","value":"quote"},{"label":"Contract & Order Management","value":"contract_and_order"},{"label":"Product & Price Book and End to End Processes & Misc Functions (Activites Chatter Reports & Dashboards)","value":"product_price"},{"label":"Service Cloud – Case Management","value":"service_cloud_case_management"}],"description":"","title":"","type":"checkbox-group"},{"fieldName":"details.appDefinition.lightningExperience.value","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"I Don't Know","value":"Neither"}],"description":"","title":"Are you using the Lightning Experience?","type":"radio-group","required":true}],"description":"Select the functionalities which are applicable for your Salesforce.com Implementation ( 1 or multiple from the 10 listed below)","id":"questions","title":"Salesforce Details","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.integrationDescription","description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","id":"integrationPoints","title":"","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"","id":"appDefinition","title":"Salesforce Dev","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-13T10:06:10.000Z","updatedAt":"2020-05-05T09:59:37.455Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":84,"name":"App","key":"app_new_addons","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"app_new_addons","info":"app_new_addons","aliases":["app_new_addons","app-new-addons"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development","value":"dev-qa"},{"label":"QA","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.deliverables contains 'design' )","fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"label":"I just need concept designs","value":"concept-designs"},{"label":"I need a comprehensive design solution that can be used for development.","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"Yes, I need designs ASAP","value":"under-3-days"},{"label":"A week works for me!","value":"under-6-days"}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.deliverables contains 'design' || details.appDefinition.deliverables contains 'dev-qa' )","fieldName":"details.appDefinition.targetDevices","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"Mobile","value":"mobile","quoteUp":1000,"maxTimeUp":7,"desc":"Mobiles"},{"minTimeUp":5,"icon":"icon-tech-outline-tablet","label":"Tablet","value":"tablet","quoteUp":1000,"maxTimeUp":7,"desc":"Tablets"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Web Browser","value":"web-browser","desc":"Web browser apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"label":"Progressive","value":"progressive"},{"label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":4391,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":6451,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"condition":"!(details.appDefinition.quickTurnaround == 'under-3-days')","iconOptions":{"number":"9-15"},"price":6256,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( details.appDefinition.mobilePlatforms contains 'android' )","label":"Google Play","value":"google-play"},{"condition":"( details.appDefinition.targetDevices contains 'desktop' || details.appDefinition.targetDevices contains 'web-browser' )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"condition":"( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-23T02:26:24.000Z","updatedAt":"2020-05-05T09:59:37.454Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":113,"name":"Mobility Testing","key":"kubik_mobility_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-mobility-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.testingDetails.targetDevices","title":"What devices would your like mobility testing to be performed on? (Please list up to five device types).","type":"textbox","required":true,"validationError":"Please provide target devices for the testing"}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Mobility Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T10:53:57.000Z","updatedAt":"2020-05-05T09:59:37.456Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":27,"name":"Zurich QA/Testing","key":"real_world_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-testing","kubik_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"layout":{"spacing":"codes","direction":"horizontal"},"questions":[{"fieldName":"details.businessUnit","spacing":"spacing-gray-input","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","spacing":"spacing-gray-input","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group"},{"fieldName":"details.appDefinition.deployActions","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"textbox"},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","title":"Are there any other restrictions?","type":"textbox"}],"description":"","id":"application-nformation","title":"Application Information","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"fieldName":"details.appDefinition.structuredTestsHelp","title":"If Structured, do you require help developing the test cases?","type":"textbox"},{"fieldName":"details.appDefinition.prePreparedTestcases","title":"If already have test cases, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox"},{"fieldName":"details.appDefinition.automatedTestingRequired","title":"Will testing be automated (using selenium or similar tools)?","type":"textbox"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group"},{"fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group"},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","title":"Would you like to test on different screen sizes/resolutions? ","type":"textbox"},{"fieldName":"details.appDefinition.geography","title":"Should testing target any specific country or geography?","type":"textbox"}],"description":"","id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.loadDetails.targetAppDescription","description":"In 160 or more characters tell us what is the app, main functions, problem area, etc..","id":"projectInfo","title":"Please provide brief description of the system and/or application you would like to execute Performance Testing on.","type":"textbox"},{"fieldName":"details.loadDetails.concurrentUsersCount","icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","title":"What is the desired load of concurrent users on the system?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","title":"Approximately how many business processes/transactions will be included in your Performance Test?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","title":"How many hours do you expect the Performance Test to be executed for?","type":"slide-radiogroup","required":false,"validationError":"Please provide expected hours of execution"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Website Development","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-13T12:06:18.000Z","updatedAt":"2020-05-05T09:59:37.455Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":7,"name":"Visual Design","key":"visual_design_prod","category":"wireframes","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-app-visual.svg","question":"Visual Design","info":"Create development-ready designs","aliases":["visual_design_prod","visual-design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"1-3"},"price":3815,"icon":"NumberText","title":"screens","value":"1-3","desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"price":7290,"icon":"NumberText","title":"screens","value":"4-8","desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"price":1920,"icon":"NumberText","title":"screens","value":"9-15","desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Visual Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Visual Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-21T12:06:56.000Z","updatedAt":"2020-05-05T09:59:37.456Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":28,"name":"Zurich Custom/General Dev","key":"custom_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Custom/General Project","aliases":["kubik_custom","kubik-custom"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please briefly explain what type of application we’re building, the problem it solves and what it should do.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.integrationDescription","description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","id":"integrationPoints","title":"","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.sfdc","title":"SFDC","type":"textbox"},{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Custom Dev","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-20T06:32:23.000Z","updatedAt":"2020-05-05T09:59:37.456Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":29,"name":"Test Project Intake Dev","key":"test_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Test Dependent questions Project","aliases":["test_custom","test-custom"],"scope":{"wizard":{"enabled":true},"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.isLive","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"condition":"details.appDefinition.isLive == false","fieldName":"details.appDefinition.deployNeeded","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"If answer to above is ‘No’, do we need to deploy the app for testing?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployNeeded == true","fieldName":"details.appDefinition.deployActions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If needed to deploy, are there special actions required to install/deploy the app? ","type":"radio-group","dependent":true},{"condition":"details.appDefinition.deployActions == true","fieldName":"details.appDefinition.deployActionsDetails","description":"Please describe if can’t directly install the app using IPA/APK, using app store, google play store","title":"If Yes, Please Describe ","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.createAccount","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group"},{"fieldName":"details.appDefinition.restrictions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Are there any other restrictions?","type":"radio-group"},{"condition":"details.appDefinition.restrictions == true","fieldName":"details.appDefinition.restrictionsDescribed","title":"If yes, Please describe","type":"textbox","dependent":true}],"description":"","wizard":{"enabled":true},"id":"application-nformation","title":"Application Information","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"condition":"details.appDefinition.testType == structured","fieldName":"details.appDefinition.structuredTestsHelp","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"If Structured, do you require help developing the test cases?","type":"radio-group","dependent":true},{"condition":"details.appDefinition.structuredTestsHelp == false","fieldName":"details.appDefinition.prePreparedTestcases","title":"If No, how will you provide the test cases (Excel file, Google Doc, Other etc
)?","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.automatedTestingRequired","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Will testing be automated (using selenium or similar tools)?","type":"radio-group"},{"condition":"details.appDefinition.automatedTestingRequired == true","fieldName":"details.appDefinition.automatedTestingDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Tablet","value":"tablet"},{"label":"Mobile","value":"mobile"}],"description":"","title":"What’s the target device(s)?","type":"checkbox-group"},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.specificDevices","icon":"question","options":[{"label":"iPad Air","value":"ipadair"},{"label":"iPad Air2","value":"ipadair2"},{"label":"iPad Pro","value":"ipadpro"},{"label":"iPhone 7","value":"iphone7"},{"label":"iPhone 8","value":"iphone8"},{"label":"iPhone X","value":"iphonex"},{"label":"iOS 10+","value":"ios"},{"label":"Android 7+","value":"android"},{"label":"Others","value":"others"}],"description":"","title":"Specific mobile devices/OSs ?","type":"checkbox-group","dependent":true},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) && ( details.appDefinition.specificDevices contains 'others' )","fieldName":"details.appDefinition.specificDevice.others","title":"If ‘Others’, please describe","type":"textbox","dependent":true},{"condition":"details.appDefinition.targetDevices contains 'mobile'","fieldName":"details.appDefinition.orientation","icon":"question","options":[{"label":"Portrait","value":"portrait"},{"label":"Landscape","value":"landscape"},{"label":"Both","value":"both"}],"description":"","title":"For Mobile Testing, what’s the orientation?","type":"checkbox-group","dependent":true},{"fieldName":"details.appDefinition.browsers","icon":"question","options":[{"label":"Google Chrome","value":"chrome"},{"label":"Firefox","value":"firefox"},{"label":"Safari","value":"safari"},{"label":"Microsoft Edge","value":"edge"},{"label":"IE11","value":"ie"}],"description":"","title":"What are the browser requirements?","type":"checkbox-group"},{"fieldName":"details.appDefinition.resolutions","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Would you like to test on different screen sizes/resolutions? ","type":"radio-group"},{"condition":"details.appDefinition.resolutions == true","fieldName":"details.appDefinition.resolutionsDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true},{"fieldName":"details.appDefinition.geography","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"title":"Should testing target any specific country or geography?","type":"radio-group"},{"condition":"details.appDefinition.geography == true","fieldName":"details.appDefinition.geographyDesc","title":"If ‘Yes’, please describe","type":"textbox","dependent":true}],"description":"","id":"testing-nformation","title":"Testing Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","wizard":{"enabled":true},"id":"appDefinition","title":"Website Development","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","title":"What font style do you prefer? (Pick one)","type":"tiled-radio-group"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","title":"What colors do you like? (Select all that apply)","type":"colors"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","title":"What icon style do you prefer? (Pick one)","type":"tiled-radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","title":"How should your application be built?","type":"checkbox-group"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","title":"Is offline access required for your application?","type":"radio-group"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","title":"What level of security is needed for your application?","type":"radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-22T06:00:28.000Z","updatedAt":"2020-05-05T09:59:37.457Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":114,"name":"Structured Testing","key":"kubik_structured_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-structured-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.structuredTestingDetails.deliverables","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"Select the deliverables you require.","type":"checkbox-group","required":true,"validationError":"Please let us know the testing deliverables."},{"fieldName":"details.structuredTestingDetails.testCount","icon":"question","options":[{"label":"Less than 100","value":"upto-100"},{"label":"Up to 150","value":"upto-150"},{"label":"Up to 300","value":"upto-300"}],"description":"","title":"How many test cases to you anticipate requiring?","type":"checkbox-group","required":true,"validationError":"Please let us know the expected number of test cases."},{"fieldName":"details.structuredTestingDetails.targetDevices","icon":"question","options":[{"label":"Mobile Phones","value":"mobile"},{"label":"Tablet","value":"tablet"},{"label":"Desktop","value":"desktop"},{"label":"Web Browser","value":"web-browser"}],"description":"","title":"Where are we testing?","type":"checkbox-group","required":true,"validationError":"Please let us know the devices where we need to test."}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Structured Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T11:03:51.000Z","updatedAt":"2020-05-05T09:59:37.457Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":85,"name":"App","key":"app_new","category":"app-test","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new","app_new"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development","value":"dev-qa"},{"label":"QA","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.deliverables contains 'design' )","fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"label":"I just need concept designs","value":"concept-designs"},{"label":"I need a comprehensive design solution that can be used for development.","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"Yes, I need designs ASAP","value":"under-3-days"},{"label":"A week works for me!","value":"under-6-days"}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.deliverables contains 'design' || details.appDefinition.deliverables contains 'dev-qa' )","fieldName":"details.appDefinition.targetDevices","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"Mobile","value":"mobile","quoteUp":1000,"maxTimeUp":7,"desc":"Mobiles"},{"minTimeUp":5,"icon":"icon-tech-outline-tablet","label":"Tablet","value":"tablet","quoteUp":1000,"maxTimeUp":7,"desc":"Tablets"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Web Browser","value":"web-browser","desc":"Web browser apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"label":"Progressive","value":"progressive"},{"label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":3270,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":5504,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"condition":"!(details.appDefinition.quickTurnaround == 'under-3-days')","iconOptions":{"number":"9-15"},"price":4567,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( details.appDefinition.mobilePlatforms contains 'android' )","label":"Google Play","value":"google-play"},{"condition":"( details.appDefinition.targetDevices contains 'desktop' || details.appDefinition.targetDevices contains 'web-browser' )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"condition":"( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-23T09:23:05.000Z","updatedAt":"2020-05-05T09:59:37.462Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":103,"name":"New app - updated design 3","key":"app-new-updated-designs-","category":"app","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"test","aliases":["app-new-updated-designs-3","anud3"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6410","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8206","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"3495","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5888","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"3153","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"5183","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"7384","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1548","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"1056","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1213","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"6416","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"441","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"1233","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"103","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3480","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4421","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5423","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7741","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"2998","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8732","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"791","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"9582","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"4830","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3579","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3089","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7455","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6742","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"656","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"901","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7526","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"7979","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8855","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2686","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"6916","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"1746","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4436","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2943","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"6831","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"4111","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"105","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3952","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5878","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"970","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2534","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6966","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2036","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"5618","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1615","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"2912","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3656","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"6685","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8462","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8578","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9426","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"5199","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2576","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3628","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9906","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7054","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"910","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1718","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5566","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"4103","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"5928","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5943","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"6004","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4678","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"109","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"7621","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1345","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1045","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2790","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8949","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"10072","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2953","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"4924","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"829","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8172","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5133","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4397","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"294","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"874","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9119","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"908","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5680","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6200","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"3508","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"6518","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"10052","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9525","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7609","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"2623","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1256","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1142","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"249","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5688","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3019","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"1706","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6262","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"760","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"2247","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"537","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6473","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"9922","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"263","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"1283","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"4963","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9654","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2521","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"6413","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"9734","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"974","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6650","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9922","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7733","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"2212","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"4218","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8259","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9640","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3715","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"1108","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"3769","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1924","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4084","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"2022","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"1855","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3479","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7308","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8267","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"873","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1039","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"6973","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7961","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"6768","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8664","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5285","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2815","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"2544","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3209","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"9294","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

If you have an existing application that needs quality assurance testing, only select the QA, Fixes & Enhancements option and you will be shown Topcoder’s standalone QA Services solutions for testing on pre-existing applications.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your app, log and eliminate any bugs. This will ensure sure your app is 100% ready for prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new customer to Topcoder and need additional help navigating the crowdsourcing process as Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":24,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-08T11:21:46.000Z","updatedAt":"2020-05-05T09:59:37.555Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":33,"name":"Mobile Application","key":"cs_application_development","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["cs-app","cs_application_development"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","type":"files"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Development Integration","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:55:28.000Z","updatedAt":"2020-05-05T09:59:37.457Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":87,"name":"App","key":"app_new","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new","app_new"],"scope":{"basePriceEstimate":5000,"wizard":{"previousStepVisibility":"readOnly","enabled":true},"baseTimeEstimateMin":7,"sections":[{"subSections":[{"description":"","id":"projectName","type":"project-name","title":"Project Name"},{"questions":[{"layout":"horizontal","fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"label":"Design","value":"design"},{"label":"Development","value":"dev-qa"},{"label":"QA","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","title":"What do you need?","type":"checkbox-group"},{"condition":"details.appDefinition.deliverables contains 'design' ","fieldName":"details.appDefinition.designGoal","icon":"question","options":[{"label":"I just need concept designs","value":"concept-designs"},{"label":"I need a comprehensive design solution that can be used for development.","value":"comprehensive-designs"}],"description":"","title":"What is the goal of your designs?","type":"radio-group"},{"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"label":"Yes, I need designs ASAP","value":"under-3-days"},{"label":"A week works for me!","value":"under-6-days"}],"description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group"},{"layout":"horizontal","condition":"( details.appDefinition.deliverables contains 'design' || details.appDefinition.deliverables contains 'dev-qa' )","fieldName":"details.appDefinition.targetDevices","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"Mobile","value":"mobile","quoteUp":1000,"maxTimeUp":7,"desc":"Mobiles"},{"minTimeUp":5,"icon":"icon-tech-outline-tablet","label":"Tablet","value":"tablet","quoteUp":1000,"maxTimeUp":7,"desc":"Tablets"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Desktop","value":"desktop","desc":"Desktop Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-desktop","label":"Web Browser","value":"web-browser","desc":"Web browser apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group"},{"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"minTimeUp":5,"icon":"icon-tech-outline-mobile","label":"iOS","value":"ios","quoteUp":1000,"maxTimeUp":7,"desc":"iOS Apps"},{"iconOptions":{"fill":"#000000"},"minTimeUp":4,"icon":"icon-tech-outline-mobile","label":"Android","value":"android","quoteUp":800,"maxTimeUp":6,"desc":"Android Apps"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"What type of platform do you need?","type":"checkbox-group"},{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"icon":"icon-tech-outline-mobile","title":"Native","value":"native","desc":"Native Apps"},{"iconOptions":{"fill":"#000000"},"icon":"icon-tech-outline-mobile","title":"Hybrid","value":"hybrid","desc":"Hybrid Apps"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"tiled-radio-group"},{"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"label":"Progressive","value":"progressive"},{"label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group"},{"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"2-4"},"price":6290,"icon":"NumberText","title":"screens (small)","value":"2-4","desc":"7-10 days"},{"iconOptions":{"number":"5-8"},"price":3652,"icon":"NumberText","title":"screens (medium)","value":"5-8","desc":"10-12 days"},{"condition":"!(details.appDefinition.quickTurnaround == 'under-3-days')","iconOptions":{"number":"9-15"},"price":5341,"icon":"NumberText","title":"screens (large)","value":"9-15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( details.appDefinition.mobilePlatforms contains 'ios' )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( details.appDefinition.mobilePlatforms contains 'android' )","label":"Google Play","value":"google-play"},{"condition":"( details.appDefinition.targetDevices contains 'desktop' || details.appDefinition.targetDevices contains 'web-browser' )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"},{"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"label":"Yes (Managed)","value":"yes"},{"label":"No (Unmanaged)","value":"no"}],"description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"questions","type":"questions","title":"Requirements"},{"condition":"( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"readOnly","enabled":true},"id":"appDefinition","title":"App Definition","required":true}],"baseTimeEstimateMax":10},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-24T12:21:47.000Z","updatedAt":"2020-05-05T09:59:37.457Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":115,"name":"Unstructured Testing","key":"kubik_unstructured_testing","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["kubik-unstructured-testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please describe the testing application (background) and objectives of this test cycle. Please describe the users of this application and any other details that will help us understand your project.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Overview","type":"textbox","required":true}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.testingDetails.isLive","icon":"question","options":[{"label":"Yes","value":"yest"},{"label":"No","value":"no"}],"description":"","title":"Is this a live application (online/production)?","type":"radio-group","required":true,"validationError":"Please let us know if this is a live application."},{"fieldName":"details.testingDetails.createAccount","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Do users need to create accounts for testing (vs. you providing test accounts)? ","type":"radio-group","required":true},{"fieldName":"details.testingDetails.requiresDomainKnowledge","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is domain knowledge required?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresDomainKnowledge == 'yes'","fieldName":"details.testingDetails.domainKnowledge","title":"Domain Knowledge","type":"textbox"},{"fieldName":"details.testingDetails.isEndCustomerFacing","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Is this an end customer facing application?","type":"radio-group","required":true},{"condition":"details.testingDetails.isEndCustomerFacing == 'yes'","fieldName":"details.testingDetails.endCustomerFacingDetails","title":"Customer facing application details","type":"textbox"},{"fieldName":"details.testingDetails.isGeographyTarget","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Should testing target a specific geography?","type":"radio-group","required":true},{"condition":"details.testingDetails.isGeographyTarget == 'yes'","fieldName":"details.testingDetails.targetGeographyDetails","title":"Target geography details","type":"textbox"},{"fieldName":"details.testingDetails.requiresTestingRights","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","title":"Does this testing effort require specific application testing rights?","type":"radio-group","required":true},{"condition":"details.testingDetails.requiresTestingRights == 'yes'","fieldName":"details.testingDetails.testingRights","title":"Specific application testing rights","type":"textbox"},{"fieldName":"details.unstructuredTestingDetails.screenCount","icon":"question","options":[{"label":"Up to 10 screens","value":"upto-10"},{"label":"Up to 30 screens","value":"upto-30"},{"label":"More than 30","value":"above-30"}],"description":"If you require more than 30 screens tested, enter your estimated number of screens in the Notes section prior to submitting your form.","title":"How many screens will be tested?","type":"checkbox-group","required":true,"validationError":"Please let us know the expected number of screens to be tested."},{"fieldName":"details.unstructuredTestingDetails.targetDevices","icon":"question","options":[{"label":"Mobile Phones","value":"mobile"},{"label":"Tablet","value":"tablet"},{"label":"Desktop","value":"desktop"},{"label":"Web Browser","value":"web-browser"}],"description":"","title":"Where are we testing?","type":"checkbox-group","required":true,"validationError":"Please let us know the devices where we need to test."}],"description":"","id":"application-information","title":"Application Information","type":"questions","required":false},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Unstructured Testing","required":true}]},"phases":{"1-qa-and-bug-fixes":{"duration":24,"name":"QA/Testing","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-25T11:14:35.000Z","updatedAt":"2020-05-05T09:59:37.458Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":209,"name":"TaaS","key":"talent_as_a_service-v1.0","category":"unscoped-solutions","subCategory":null,"metadata":{},"icon":"talent-as-a-service","question":"What type of talent you are looking for?","info":"Talent as a Service","aliases":["talent-as-a-service-v1.0","talent_as_a_service-v1.0"],"scope":{"addonPriceConfig":{},"basePriceEstimate":0,"priceConfig":{},"hidePrice":true,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We are excited to help you get started. All of Topcoder's offerings, pricing and timeline estimates are built on our 15 years of experience and thousands of projects. While we are determining the initial scope here, Topcoder will send a final proposal after our review of your needs.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your talent pool.","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.taasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"","label":"Design","value":"design"},{"summaryLabel":"Development","description":"","label":"Development","value":"dev"},{"description":"","label":"Data Science","value":"data-science"},{"description":"","label":"Quality Assurance","value":"qa"},{"description":"","label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need support?","type":"checkbox-group","summaryTitle":"Talent Area","validationError":"Please, choose what do you need.","required":true},{"condition":"HAS_OTHER_DELIVERABLE","fieldName":"details.taasDefinition.otherBrief","icon":"question","description":"","title":"Please describe the type of talent you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"condition":"HAS_DESIGN_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.taasDefinition.design.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with design talent.","type":"textbox","summaryTitle":"Design Description"},{"skills":{"categoriesMapping":{"design":"DESIGN"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.taasDefinition.skills.design","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What skills are important for your designers to have?","type":"skills","summaryTitle":"Design Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"design-skills","type":"questions"},{"condition":"HAS_DEV_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.taasDefinition.dev.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with development talent.","type":"textbox","summaryTitle":"Dev Description"},{"skills":{"categoriesMapping":{"dev":"DEVELOP"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.taasDefinition.skills.dev","icon":"question","theme":"light","validations":"isRequired","title":"What skills are important for your developers to have?","type":"skills","summaryTitle":"Dev Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"dev-skills","type":"questions"},{"condition":"HAS_DATA_SCIENCE_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DATA_SCIENCE_DELIVERABLE","fieldName":"details.taasDefinition.dataScience.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with data science talent.","type":"textbox","summaryTitle":"DataScience Description"},{"skills":{"categoriesMapping":{"data-science":"DATA_SCIENCE"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_DATA_SCIENCE_DELIVERABLE","fieldName":"details.appDefinition.skills.dataScience","icon":"question","theme":"light","validations":"isRequired","title":"What skills are important for your data scientists to have?","type":"skills","summaryTitle":"DataScience Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"datascience-skills","type":"questions"},{"condition":"HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_QA_DELIVERABLE","fieldName":"details.taasDefinition.qa.brief","icon":"question","description":"","title":"Briefly describe the work you are seeking to accomplish with QA talent.","type":"textbox","summaryTitle":"QA Description"},{"skills":{"categoriesMapping":{"qa":"QA"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.taasDefinition.skills.qa","icon":"question","theme":"light","validations":"isRequired","title":"What skills are important for your testers to have?","type":"skills","summaryTitle":"QA Skills","validationError":"Please, choose at least one skill.","required":true}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"qa-skills","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.fullTimeTalentEstimate","icon":"question","options":[{"title":"Select talent count","value":""},{"title":"5","value":"5"},{"title":"6","value":"6"},{"title":"7","value":"7"},{"title":"8","value":"8"},{"title":"9","value":"9"},{"title":"10","value":"10"},{"title":"11","value":"11"},{"title":"12","value":"12"},{"title":"13","value":"13"},{"title":"14","value":"14"},{"title":"15","value":"15"},{"title":"16","value":"16"},{"title":"17","value":"17"},{"title":"18","value":"18"},{"title":"19","value":"19"},{"title":"20","value":"20"},{"title":"21","value":"21"},{"title":"22","value":"22"},{"title":"23","value":"23"},{"title":"24","value":"24"},{"title":"25","value":"25"},{"title":"25+","value":"25+"}],"description":"","theme":"light","title":"What is the estimated number of full-time talent you are looking to fill?","type":"select-dropdown","summaryTitle":"Full time talent","required":true,"validationError":"Please provide estimated number of full-time talent you are looking to fill."},{"fieldName":"details.taasDefinition.talentRetentionDuration","icon":"question","options":[{"title":"2-3 Months","value":"2-3-months"},{"title":"3-6 Months","value":"3-6-months"},{"title":"3-9 Months","value":"6-9-months"},{"title":"9-12 Months","value":"9-12-months"},{"title":"12+ Months","value":"above-12-months"}],"description":"","theme":"light","title":"How long do you anticipate requiring talent support?","type":"slide-radiogroup","summaryTitle":"Talent Retention","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.taasDefinition.needPrivilegedAccess","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","title":"To accomplish their work, will the talent need provisioned/privileged access to internal environments?","type":"radio-group","required":true,"validationError":"Please let us know if the talent need provisioned/privileged access"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"talent-details","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.needBackgroundChecks","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","title":"Will you require background checks for your talent?","type":"radio-group","required":true,"validationError":"Please let us know if you need background checks for your talent"},{"fieldName":"details.taasDefinition.needCustomNdas","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","title":"Will you require the talent to sign custom NDAs or other specialized agreements?","type":"radio-group","required":true,"validationError":"Please let us know if the talent to sign custom NDAs"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information you would like to include","title":"Notes (optional)","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"tc-services-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Talent Pool Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null,"buildingBlocks":{},"preparedConditions":{"HAS_DATA_SCIENCE_DELIVERABLE":"(details.taasDefinition.deliverables contains 'data-science')","HAS_DESIGN_DELIVERABLE":"(details.taasDefinition.deliverables contains 'design')","HAS_DEV_DELIVERABLE":"(details.taasDefinition.deliverables contains 'dev')","HAS_OTHER_DELIVERABLE":"(details.taasDefinition.deliverables contains 'other')","TRUTHY":"( 1 == 1)","HAS_QA_DELIVERABLE":"(details.taasDefinition.deliverables contains 'qa')","FALSY":"( 1 == 2)"},"showPrice":false,"priceConfig-old":null,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-06-18T07:28:39.000Z","updatedAt":"2020-05-05T09:59:37.458Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":31,"name":"Visual Design","key":"cs_visual_design_prod","category":"wireframes","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-app-visual.svg","question":"Visual Design","info":"Create development-ready designs","aliases":["cs_visual_design_prod","cs-visual-design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"1-3"},"price":1689,"icon":"NumberText","title":"screens","value":"1-3","desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"price":8387,"icon":"NumberText","title":"screens","value":"4-8","desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"price":7693,"icon":"NumberText","title":"screens","value":"9-15","desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Visual Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Visual Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:50:29.000Z","updatedAt":"2020-05-05T09:59:37.460Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":66,"name":"Zurich Data Science","key":"kubik_data_science","category":"app_dev","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What do you need to explore?","info":"Data Science projects for Zurich","aliases":["kubik-data-science","kubik_data_science"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox","required":true}],"description":"","id":"appInfo","title":"App Information","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.problemType","description":"For example; Speed up an algorithm? Image Recognition? Use existing data to predict something? Optimization?","title":"What problem is it you’re looking to solve?","type":"textbox"},{"fieldName":"details.appDefinition.milestones","description":"","title":"What kind of key milestones or deadlines do you have?","type":"textbox"},{"fieldName":"details.appDefinition.minPerfThreshold","description":"","title":"Is there a minimum performance threshold you desire?","type":"textbox"},{"fieldName":"details.appDefinition.successDefinition","description":"","title":"What is the definition of success when solving this problem?","type":"textbox"},{"fieldName":"details.appDefinition.deployEnvironment","description":"","title":"What environment would the solution be deployed in?","type":"textbox"},{"fieldName":"details.appDefinition.solutionValue","description":"Think in terms of incremental revenue, reduced cost, time saved, etc.","title":"What is the value that the solution to this problem could bring?","type":"textbox"},{"fieldName":"details.appDefinition.dataAccessRoadBlocks","description":"e.g. HIPPA, Data Use Agreements","title":"Are there any obvious roadblocks to data access? ","type":"textbox"},{"fieldName":"details.appDefinition.exampleData","description":"","title":"Please share an example of your data, either a sample dataset or mock data emulating the structure and type of data we would be using.","type":"textbox"},{"fieldName":"details.appDefinition.stakeholders","description":"","title":"Who are the key stakeholders for this problem? Please provide their information.","type":"textbox"}],"description":"","id":"scopeQuestions","title":"Exploratory Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.technicalRequirements.dataVolume","title":"How much data do you currently have? How many records? How many variables?","type":"textbox"},{"fieldName":"details.technicalRequirements.dataLocationAndTransfer","title":"Where is the data kept and will there be any data transfer obstacles?","type":"textbox"},{"fieldName":"details.technicalRequirements.groundTruthData","title":"Describe the “ground truth” data?","type":"textbox"},{"fieldName":"details.technicalRequirements.dataStructureType","title":"If machine learning or predictive analytics then is the data structured, semi-structured, or unstructured?","type":"textbox"}],"description":"","title":"If this problem involves predictive analytics, image recognition or machine learning then","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.technicalRequirements.currentSolution","title":"Do you have a current solution? If so, how do you measure its effectiveness?","type":"textbox"},{"fieldName":"details.technicalRequirements.triedSolutions","title":"What have you tried so far to solve this problem or improve your current solution? To what degree has it worked? Who has performed this work?","type":"textbox"},{"fieldName":"details.technicalRequirements.improvementBoostNeeded","title":"How much of an improvement in performance relative to your current solution would you like to see?","type":"textbox"},{"fieldName":"details.technicalRequirements.metadata","description":"Business process flow diagrams, data dictionaries, and data are all extremely helpful.","title":"Please share all of the sources of metadata and data we might use for this project.","type":"textbox"},{"fieldName":"details.technicalRequirements.standardProblemPointers","title":"If the problem is a well-researched scientific problem, are there papers or websites you could point us to?","type":"textbox"},{"fieldName":"details.technicalRequirements.dataVariability","description":"e.g., ambient light level, weather conditions, image quality, shape, size, or texture of the object of interest, color versus black and white images, language, speaker, sex of the speaker, time of collection, location of collection, mode of collection, etc.","title":"What are the important sources of variability in the data?","type":"textbox"},{"fieldName":"details.technicalRequirements.deliverables","title":"How will the results be operationalized? Will just the algorithm suffice or will you create a tool yourself, or do you want us to make a tool for you? If the latter, with what other solutions or systems will the tool need to be compatible, and what are the requirements?","type":"textbox"},{"fieldName":"details.technicalRequirements.endUserOfTool","title":"Who will be the ultimate end-user of the tool?","type":"textbox"},{"fieldName":"details.technicalRequirements.productOwnerInOrg","title":"Who will be the owner of the product within the organization?","type":"textbox"},{"fieldName":"details.technicalRequirements.restrictionsAndSPOC","title":"What restrictions, if any, does your organization have on licensing and using third party or open source software solutions? Who in your organization is most familiar with those restrictions, and how can we contact them?","type":"textbox"}],"description":"","title":"Technical Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Data Science","required":true}]},"phases":{"data-science":{"duration":25,"name":"Data Science","products":[{"id":25,"productKey":"design-iteration-2-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-13T06:23:23.000Z","updatedAt":"2020-05-05T09:59:37.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":82,"name":"Zurich Custom/General Dev","key":"custom_dev","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"What kind of development do you need?","info":"Custom/General Project","aliases":["subsection-horizontal-layout","subsection_horizontal_layout"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"layout":{"spacing":"codes","direction":"horizontal"},"questions":[{"fieldName":"details.ccbu.costCentre","spacing":"spacing-gray-input","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Screen name cannot be blank","required":true},{"fieldName":"details.ccbu.businessUnit","spacing":"spacing-gray-input","title":"Business Unit","type":"textinput","required":false}],"id":"questions","title":"Cost Center & Business Unit","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Please briefly explain what type of application we’re building, the problem it solves and what it should do.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Project Type/Overview","type":"textbox"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"layout":{"direction":"horizontal"},"questions":[{"fieldName":"details.ccbu.costCentre2","validations":"isRequired","title":"Normal 1","type":"textinput","validationError":"Screen name cannot be blank","required":true},{"fieldName":"details.ccbu.businessUnit2","title":"Normal 2","type":"textinput","required":false}],"id":"questions","title":"Normal questions but horizontal","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.integrationDescription","description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","id":"integrationPoints","title":"","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":"Integration Points","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.strategicassets.sfdc","title":"SFDC","type":"textbox"},{"fieldName":"details.strategicassets.guidewire","title":"Guidewire","type":"textbox"},{"fieldName":"details.strategicassets.tableau","title":"Tableau","type":"textbox"},{"fieldName":"details.strategicassets.sitecore","title":"Sitecore","type":"textbox"},{"fieldName":"details.strategicassets.innoveoskye","title":"Innoveo Skye","type":"textbox"},{"fieldName":"details.strategicassets.smartcommunications","title":"SmartCommunications","type":"textbox"},{"fieldName":"details.strategicassets.msdynamics","title":"MS Dynamics","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackStrategicAssets","title":"Technology Stack (Strategic Assets)","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Technology Stack (General) - Do you have a preferred technology stack? If yes, please list them here:","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Custom Dev","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-01-04T15:06:23.000Z","updatedAt":"2020-05-05T09:59:37.460Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":222,"name":"Design, Development & Deployment","key":"app_new","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop?","info":"Build apps for mobile or web","aliases":["app-new-oct"],"scope":{"buildingBlocks":{"ADMIN_TOOL_DEV_ADDON":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"2917","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON )"},"GOOGLE_ANALYTICS_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"845","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON )"},"API_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7795","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON )"},"SSO_INTEGRATION_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2443","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON )"},"OFFLINE_CAPABILITY_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2361","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON )"},"DESIGN_DIRECTION_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9473","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON )"},"DESIGN_BLOCK":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"3174","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE )"},"LOCATION_SERVICES_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6112","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON )"},"RUX_BLOCK":{"maxTime":8,"metadata":{"deliverable":"design"},"price":"3248","minTime":8,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN )"},"SVC_BLOCK":{"maxTime":0,"metadata":{"deliverable":"dev-qa"},"price":"6604","minTime":0,"conditions":"( HAS_DEV_DELIVERABLE )"},"ZEPLIN_APP_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"6734","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON )"},"MAZE_UX_TESTING_ADDON":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"6003","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON )"},"RESP_UI_PROTOTYPE_ADDON":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7539","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON )"},"CI_CD_ADDON":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"1614","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON )"},"BLACKDUCK_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9398","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON )"},"QA_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5201","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MOBILE_ENT_SECURITY_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5313","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON )"},"UNIT_TESTING_ADDON":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9691","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON )"},"CONTAINERIZED_CODE_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7973","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON )"},"SMTP_SERVER_SETUP_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3584","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON )"},"RESP_DESIGN_IMPL_ADDON":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"10095","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON )"},"CHECKMARX_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6386","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON )"},"AUTOMATION_TESTING_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"342","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON )"},"DESIGN_BLOCK_FOR_DEV":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4173","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"UI_PROTOTYPE_ADDON":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"208","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON )"},"SOCIAL_MEDIA_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8328","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON )"},"THIRD_PARTY_INTEGRATION_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7861","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON )"},"PERF_TESTING_ADDON":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"2919","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON )"},"UAT_ENHANCEMENTS_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2904","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON )"},"WIREFRAMES_ADDON":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"6781","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON )"},"API_INTEGRATION_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8074","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON )"},"DEV_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4121","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MIN_BATTERY_USE_IMPL_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9090","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON )"},"BACKEND_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3619","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON )"},"SMS_GATEWAY_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1804","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON )"}},"preparedConditions":{"HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","MOBILITY_SOLUTION":"!(details.appDefinition.mobilePlatforms hasLength 0)","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","MOBILE_DEVICES":"(details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","WEB_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'desktop')","WEB_DEVICE":"(details.appDefinition.targetDevices contains 'web-browser')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CUSTOM_QUOTE":"((details.appDefinition.webBrowserBehaviour == 'responsive' || details.appDefinition.designGoal == 'concept-designs') && !(details.appDefinition.targetDevices hasLength 0 || details.appDefinition.targetDevices hasLength 1)) || details.appDefinition.needAdditionalScreens == 'yes'","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","NEED_ADDITIONAL_SCREENS":"(details.appDefinition.needAdditionalScreens == 'yes')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","RESP_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'responsive')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.webBrowserBehaviour == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","ONLY_ONE_OS_MOBILE":"( details.appDefinition.mobilePlatforms hasLength 1 )","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","ONLY_TWO_OS_BOTH_MOBILES":"(details.appDefinition.mobilePlatforms hasLength 2)","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","IS_WEB_RESP_APP":"(details.appDefinition.webBrowserBehaviour == 'responsive')","CONCEPT_DESIGN":"( )","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","FALSY":"1 == 2","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["CI_CD_ADDON"]],"HAS_DESIGN_DELIVERABLE":[["WIREFRAMES_ADDON"],["UI_PROTOTYPE_ADDON"],["RESP_UI_PROTOTYPE_ADDON"],["ZEPLIN_APP_ADDON"],["DESIGN_DIRECTION_ADDON"],["MAZE_UX_TESTING_ADDON"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON"],["API_INTEGRATION_ADDON"],["OFFLINE_CAPABILITY_ADDON"],["MIN_BATTERY_USE_IMPL_ADDON"],["SMTP_SERVER_SETUP_ADDON"],["BACKEND_DEVELOPMENT_ADDON"],["RESP_DESIGN_IMPL_ADDON"],["ADMIN_TOOL_DEV_ADDON"],["LOCATION_SERVICES_ADDON"],["CONTAINERIZED_CODE_ADDON"],["GOOGLE_ANALYTICS_ADDON"],["SSO_INTEGRATION_ADDON"],["THIRD_PARTY_INTEGRATION_ADDON"],["SMS_GATEWAY_INTEGRATION_ADDON"],["SOCIAL_MEDIA_INTEGRATION_ADDON"],["MOBILE_ENT_SECURITY_ADDON"],["CHECKMARX_SCANNING_ADDON"],["BLACKDUCK_SCANNING_ADDON"],["AUTOMATION_TESTING_ADDON"],["PERF_TESTING_ADDON"],["UNIT_TESTING_ADDON"],["UAT_ENHANCEMENTS_ADDON"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"(HAS_DESIGN_DELIVERABLE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK"],["RUX_BLOCK"]],"(HAS_DESIGN_DELIVERABLE && THREE_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK","DESIGN_BLOCK"]],"(HAS_DESIGN_DELIVERABLE && TWO_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK"]],"MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_TWO_OS_BOTH_MOBILES":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(RESP_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_ONE_OS_MOBILE":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(WEB_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"Designers will produce up to 8 high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"condition":"CONCEPT_DESIGN","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 8 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 8 screens?","required":true},{"condition":"COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 15 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 15 screens?","required":true},{"condition":"(CONCEPT_DESIGN && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"8-16","description":"","label":"8-16 screens","value":"8-16"},{"summaryLabel":"16-24","description":"","label":"16-24 screens","value":"16-24"},{"summaryLabel":"24-32","description":"","label":"24-32 screens","value":"24-32"},{"summaryLabel":"32-40","description":"","label":"32-40 screens","value":"32-40"},{"summaryLabel":"40+","description":"","label":"40+ screens","value":"40+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true},{"condition":"((COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"15-30","description":"","label":"15-30 screens","value":"15-30"},{"summaryLabel":"30-45","description":"","label":"30-45 screens","value":"30-45"},{"summaryLabel":"45-60","description":"","label":"45-60 screens","value":"45-60"},{"summaryLabel":"60+","description":"","label":"60+ screens","value":"60+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Topcoder’s standard concept design solution provides concept designs for one device. If you require concept designs for more than one device, please select all device types required and we will send you a custom proposal.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"CONCEPT_DESIGN","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"( ( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN ) || HAS_DEV_DELIVERABLE)","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (CONCEPT_DESIGN || HAS_DEV_DELIVERABLE) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your designs will be tailored to iOS mobile devices.","label":"iOS","value":"ios"},{"description":"Your designs will be tailored to Android mobile devices.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Should your app use a native or hybrid framework?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( HAS_DEV_DELIVERABLE && ( details.appDefinition.mobilePlatforms contains 'ios' || details.appDefinition.mobilePlatforms contains 'android' ))","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.webBrowserBehaviour","icon":"question","description":"","title":"How should your app work in web browsers?","type":"radio-group","summaryTitle":"Web browser behaviour","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"I want a web app that is responsive to all device types, including desktop.","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"I want a web app that is designed specifically for desktop use.","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"condition":"HAS_DESIGN_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.hasBrandGuidelines","icon":"question","description":"","title":"Do you have required style/brand guidelines?","type":"radio-group","summaryTitle":"Brand Guidelines","validationError":"Please let us know if you have style/brand guildlines?","required":true,"help":{"linkTitle":"Where to Share Style & Branding Guidelines","title":"Where to Share Style & Branding Guidelines","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your style guide or branding guidelines inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificFonts","icon":"question","description":"","title":"Are there particular fonts you want used?","type":"radio-group","summaryTitle":"Specific Fonts","validationError":"Please let us know if you need particular fonts?","required":true,"help":{"linkTitle":"Where to Share Font Preferences","title":"Where to Share Font Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your font preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificColors","icon":"question","description":"","title":"Are there particular colors/themes you want used?","type":"radio-group","summaryTitle":"Specific Colors","validationError":"Please let us know if you need particular colors/theme?","required":true,"help":{"linkTitle":"Where to Share Color/Theme Preferences","title":"Where to Share Color/Theme Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your color/theme preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"design-deliverable-questions","type":"questions"},{"condition":"HAS_DEV_DELIVERABLE","hideTitle":false,"questions":[{"fieldName":"details.techstack.hasLanguagesPref","label":"Programming Languages","title":"","type":"checkbox","summaryTitle":"Languages Pref"},{"condition":"details.techstack.hasLanguagesPref == true","fieldName":"details.techstack.languages","title":"Let us know what programming languages you prefer.","type":"textbox","summaryTitle":"Languages"},{"fieldName":"details.techstack.hasFrameworksPref","label":"Frameworks","title":"","type":"checkbox","summaryTitle":"Frameworks Pref"},{"condition":"details.techstack.hasFrameworksPref == true","fieldName":"details.techstack.frameworks","title":"Let us know what frameworks you prefer.","type":"textbox","summaryTitle":"Frameworks"},{"fieldName":"details.techstack.hasDatabasePref","label":"Database","title":"","type":"checkbox","summaryTitle":"Database Pref"},{"condition":"details.techstack.hasDatabasePref == true","fieldName":"details.techstack.database","title":"Let us know what database you prefer.","type":"textbox","summaryTitle":"Database Pref"},{"fieldName":"details.techstack.hasServerPref","label":"Server","title":"","type":"checkbox","summaryTitle":"Database"},{"condition":"details.techstack.hasServerPref == true","fieldName":"details.techstack.server","title":"Let us know what server you prefer.","type":"textbox","summaryTitle":"Server"},{"fieldName":"details.techstack.hasHostingPref","label":"Hosting Environment","title":"","type":"checkbox","summaryTitle":"Hosting Pref"},{"condition":"details.techstack.hasHostingPref == true","fieldName":"details.techstack.hosting","title":"Let us know what hosting you prefer.","type":"textbox","summaryTitle":"Hosting Environments"},{"fieldName":"details.techstack.noPref","label":"No Preferences","title":"","type":"checkbox","summaryTitle":"No Preference"},{"fieldName":"details.techstack.sourceControl","title":"How do you manage source control?","type":"textbox","summaryTitle":"Source Control"}],"description":"","wizard":{"previousStepVisibility":"readOptimized"},"id":"dev-deliverable-questions","title":"Do you have technology stack preferences?","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"condition":"FALSY && !(CUSTOM_QUOTE)","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"!id","fieldName":"attachments","description":"","id":"files","title":"PLEASE upload any document that can help us in moving ahead with the project","type":"files"},{"condition":"(CUSTOM_QUOTE)","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Topcoder will contact you shortly with a proposal on your project.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2},{"sectionIndex":4}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-10-03T04:21:34.000Z","updatedAt":"2020-05-05T09:59:37.460Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":224,"name":"Digital As A Service","key":"daas","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"What type of digital service you are looking for?","info":"digital as a service","aliases":["daas"," digital_as_a_service"," diaas"],"scope":{"buildingBlocks":{},"preparedConditions":{"HAS_API_MANAGEMENT_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIManagement')","DATA_ENRICHMENT_REQUIRED":"(details.daasDefinition.apiManagement.dataEnrichment == 'Yes')","HAS_B2B_DELIVERABLE":"(details.daasDefinition.deliverables contains 'b2bServices')","DATA_TRANFORMATION_REQUIRED":"(details.daasDefinition.apiManagement.dataTransformation == 'Yes')","CLOUD_MODEL_REQUIRED":"(details.daasDefinition.a2a.cloudModel == 'other')","HAS_A2A_DELIVERABLE":"(details.daasDefinition.deliverables contains 'a2aServices')","HAS_OTHER_PROTOCOL":"(details.daasDefinition.protocols == 'Other')","TRUTHY":"( 1 == 1)","CLOUD_DEPLOYMENT_PREFERENCE":"(details.daasDefinition.a2a.deploymentPref == 'other')","HAS_API_MICROSERVICE_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIAndMicroservice')","FILE_TRANSFER_REQUIRED":"(details.daasDefinition.fileTransfer == 'Yes')","FALSY":"( 1 == 2)"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Title your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.daasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"B2BServices","description":"Automation of business processes and communication/data exchange between two or more organizations.","label":"Business to Business Services","value":"b2bServices"},{"summaryLabel":"A2AServices","description":"Integration between applications.","label":"Application to Application Services","value":"a2aServices"},{"summaryLabel":"API & Microservice","description":"Enable integration and modernization of applications using gateways and microservices framework.","label":"API Implementation & Microservices","value":"APIAndMicroservice"},{"summaryLabel":"API Management","description":"The API governing process for a secure and scalable environment, using tools like APIGEE, Layer 7, IBM API Connect, etc.","label":"API Management","value":"APIManagement"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"radio-group","summaryTitle":"Solution Needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"condition":"HAS_B2B_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Understanding the number of partner organizations that will be onboarded provides context on:
- Number of organization profiles to be configured
- Number of partner profiles
- Number of security methods to be configured
- Number of defined contracts for trading partners

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.b2b.partnerOrgs","icon":"question","description":"","title":"How many partner organizations will be onboarded?","type":"textbox","summaryTitle":"Partner Orgs","required":true,"validationError":"Please, describe your partner orgnizations"},{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Knowing this highlights the number of unique interfaces that will need to be designed and developed, as well as how many will require scheduling and configuration.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.interfaces","icon":"question","description":"","title":"How many interfaces will need to be developed?","type":"textbox","summaryTitle":"Interfaces","required":true,"validationError":"Please, describe interfaces to be developed"},{"help":{"linkTitle":"Why is this important?","title":"Why is this important?","content":"

The type of protocol indicates how the business to business services will be connected and communicate.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.protocols","icon":"question","options":[{"summaryLabel":"AS2","description":"","label":"AS2","value":"AS2"},{"summaryLabel":"AS4","description":"","label":"AS4","value":"AS4"},{"summaryLabel":"Webservice","description":"","label":"Webservice","value":"Webservice"},{"summaryLabel":"SFTP","description":"","label":"SFTP","value":"SFTP"},{"summaryLabel":"Other","description":"","label":"Other","value":"Other"}],"description":"","theme":"light","title":"What type of protocol should be used?","type":"radio-group","summaryTitle":"Protocol","required":true,"validationError":"Please, select the protocol"},{"condition":"HAS_B2B_DELIVERABLE && HAS_OTHER_PROTOCOL","fieldName":"details.daasDefinition.protocolDesc","icon":"question","description":"","title":"Describe your desired protocol?","type":"textbox","summaryTitle":"Other desc","required":true,"validationError":"Please, describe other protocol"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.maps","icon":"question","description":"","title":"How many maps will need to be developed?","type":"textbox","summaryTitle":"Maps","required":true,"validationError":"Please, describe maps"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.fileTransfer","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":" Will you need managed file transfer services?","type":"radio-group","summaryTitle":"File transfer","required":true,"validationError":"Please, select one option"},{"condition":"HAS_B2B_DELIVERABLE && FILE_TRANSFER_REQUIRED","fieldName":"details.daasDefinition.fileSize","icon":"question","description":"","title":"What is the maximum size of file to transfer? ?","type":"textbox","summaryTitle":"File Size","required":true,"validationError":"Please, provide the size of file"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"b2b-solution","type":"questions"},{"condition":"HAS_A2A_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking?","content":"

Interface or integration service enables the communication of disparate software components.

"},"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.interfaces","icon":"question","description":"","title":"How many interfaces or integration services are in scope?","type":"textbox","summaryTitle":"Interfaces/Services","required":true,"validationError":"Please, describe how many interfaces are in scope"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.mappingFields","icon":"question","description":"","title":"How many fields require mapping?","type":"textbox","summaryTitle":"mapping fields","required":true,"validationError":"Please, describe mapping fields"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.destinationEndPoints","icon":"question","description":"","title":"How many destination end points are there?","type":"textbox","summaryTitle":"Destination End Points","required":true,"validationError":"Please, provide the destination end points"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataTransformMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data transformation method?","type":"radio-group","summaryTitle":"Data Transformation Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.orchestrationMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data process or service orchestration method?","type":"radio-group","summaryTitle":"Orchestration Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data enrichment be required?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.securityScheme","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will security scheme implementation be required?","type":"radio-group","summaryTitle":"Security Scheme","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.businessRule","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will business rule implementation be required?","type":"radio-group","summaryTitle":"Business Rule","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.hybridIntegration","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Is hybrid integration required?","type":"radio-group","summaryTitle":"Hybrid Integration","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.cloudModel","icon":"question","options":[{"label":"IaaS","value":"iaas"},{"label":"PaaS","value":"paas"},{"label":"SaaS","value":"saas"},{"label":"Multi-cloud","value":"multiCloud"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What cloud model are you using in the application layer?","type":"radio-group","summaryTitle":"Cloud Model","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_MODEL_REQUIRED","fieldName":"details.daasDefinition.a2a.cloudModelDesc","icon":"question","description":"","title":"Describe your cloud model","type":"textbox","summaryTitle":"Cloud Model","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.deploymentPref","icon":"question","options":[{"label":"On-premise","value":"onPremise"},{"label":"On-cloud","value":"onCloud"},{"label":"iPaaS","value":"ipaas"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What is your cloud deployment preference?","type":"radio-group","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_DEPLOYMENT_PREFERENCE","fieldName":"details.daasDefinition.a2a.cloudDeploymentDesc","icon":"question","description":"","title":"Describe your cloud deployment preference","type":"textbox","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.serviceContainerization","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does your services need to be containerized?","type":"radio-group","summaryTitle":"Service Containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"a2a-solution","type":"questions"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.count","icon":"question","description":"","title":"How many APIs & microservices require development?","type":"textbox","summaryTitle":"APIs & Microservices","required":true,"validationError":"Please, describe APIs & microservices to be developed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.restOperations","icon":"question","description":"","title":"How many REST operations will be exposed?","type":"textbox","summaryTitle":"REST Operations","required":true,"validationError":"Please, describe REST operations to be exposed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dbTables","icon":"question","description":"","title":"How many database tables will be queried?","type":"textbox","summaryTitle":"Database Tables","required":true,"validationError":"Please, describe database tables to be queried?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.modelClasses","icon":"question","description":"","title":"How many model classes need to be developed?","type":"textbox","summaryTitle":"Model Classes","required":true,"validationError":"Please, describe model classes to be developed?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.methods","icon":"question","description":"","title":"How many methods are in the service layer?","type":"textbox","summaryTitle":"Service Layer Methods","required":true,"validationError":"Please, describe methods in the service layer"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.externalAPIs","icon":"question","description":"","title":"How many external APIs or services will be utilized?","type":"textbox","summaryTitle":"External APIs","required":true,"validationError":"Please, describe external APIs"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.requestFields","icon":"question","description":"","title":"How many fields are in the request?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.validatedFields","icon":"question","description":"","title":"How many request fields require validation?","type":"textbox","summaryTitle":"Validated Request Fields","required":true,"validationError":"Please, describe validated request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.responseFields","icon":"question","description":"","title":"How many fields are in the response?","type":"textbox","summaryTitle":"Response Fields","required":true,"validationError":"Please, describe response fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.commProtocol","icon":"question","description":"","title":"What inter-service communication protocol should be used?","type":"textbox","summaryTitle":"InterService Comm Protocol","required":true,"validationError":"Please, describe inter-service communication protocol"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dataCaching","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data caching be required?","type":"radio-group","summaryTitle":"Data Caching","required":true,"validationError":"Please, select one option"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.serviceContainers","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do services need to be containerized?","type":"radio-group","summaryTitle":"Service containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiImplementationAndMicroservice-solution","type":"questions"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.count","icon":"question","description":"","title":"How many APIs will be exposed?","type":"textbox","summaryTitle":"APIs","required":true,"validationError":"Please, describe APIs to be exposed"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.requstFields","icon":"question","description":"","title":"How many request fields are in the APIs?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.serviceCalls","icon":"question","description":"","title":"How many backend service calls are expected?","type":"textbox","summaryTitle":"Backend Service Calls","required":true,"validationError":"Please, describe backend service calls"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataTransformation","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data transformation?","type":"radio-group","summaryTitle":"Data Transformation","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_TRANFORMATION_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.tranformationFields","icon":"question","description":"","title":"How many fields require data transformation?","type":"textbox","summaryTitle":"Data Tranform Fields","required":true,"validationError":"Please, describe fields require for data transformation"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data enrichment?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_ENRICHMENT_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.enrichmentFields","icon":"question","description":"","title":"How many fields require data enrichment?","type":"textbox","summaryTitle":"Data Enrichment Fields","required":true,"validationError":"Please, describe fields require for data enrichment"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.communicationProtocol","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does the communication protocol require transformation?","type":"radio-group","summaryTitle":"Communication Protocol","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiManagement-solution","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Digital As A Service","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-10-30T04:03:50.000Z","updatedAt":"2020-05-05T09:59:37.461Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":211,"name":"Data Science Ideation","key":"ds_ideation","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

  • Written briefs that describe findings and approach
  • Ideations can also include demonstrative pseudocode or brief proofs of concepts
"}]},"icon":"data-science-ideation","question":"DS Ideationa","info":"Wondering what you can do with your data? Get tailored recommendations to see how your data science problem can be solved, by some of the brightest minds on the planet.","aliases":["ds_ideation"," ds-ideation"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"9204","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"9029","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"5926","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"9012","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"5299","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"8362","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Ideation"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsIdeation.problemStatement","icon":"question","description":"","title":"Please state the problem you would like to solve.","type":"textbox","summaryTitle":"Problem Statement","required":true,"validationError":"Please, provide problem statement/concept for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"See White Paper Example","title":"See White Paper Example","content":"

Overview: describe your approach in “laymen’s terms”

Methods: describe what you did to come up with this approach, eg literature search, experimental testing, etc

Materials: did your approach use a specific technology? Any libraries? List all tools and libraries you used

Discussion: Explain what you attempted, considered or reviewed that worked, and especially those that didn’t work or that you rejected. For any that didn’t work, or were rejected, briefly include your explanation for the reasons (e.g. such-and-such needs more data than we have). If you are pointing to somebody else’s work (eg you’re citing a well known implementation or literature), describe in detail how that work relates to this work, and what would have to be modified

Data: What other data should one consider? Is it in the public domain? Is it derived? Is it necessary in order to achieve the aims? Also, what about the data described/provided - is it enough?

Assumptions and Risks: what are the main risks of this approach, and what are the assumptions you/the model is/are making? What are the pitfalls of the data set and approach?

Results: Did you implement your approach? How’d it perform? If you’re not providing an implementation, use this section to explain the EXPECTED results.

Other: Discuss anyother issues or attributes that don’t fit neatly above that you’d also like to include

"},"fieldName":"details.dsIdeation.output","icon":"question","options":[{"description":"Submission options should provide a point of view, summarized and cited references, and analysis. Click the tooltip to see an example submission template.","label":"White papers, only.","value":"whitePapers"},{"description":"POCs are meant to be illustrative, and are not robust solutions.","label":"White papers with light,functioning proof of concepts.","value":"whitePapersAndPoc"}],"description":"","theme":"light","title":"What type of output are you seeking?","type":"radio-group","summaryTitle":"Project output","required":true},{"condition":"(details.dsIdeation.output == 'whitePapersAndPoc')","fieldName":"details.dsIdeation.preferredTech","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have preferred technologies for your POC?","type":"radio-group","summaryTitle":"Do you have Preferred Technology"},{"condition":"( details.dsIdeation.preferredTech == 'yes')","fieldName":"details.dsIdeation.preferredTechnologies","icon":"question","options":[{"label":"Python","value":"python"},{"label":"R and derivatives","value":"rDerivatives"},{"label":"Jupyter Notebook","value":"jupyter"},{"label":"Java","value":"java"},{"label":"C++","value":"cpp"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"Indicate your preferred technologies","type":"checkbox-group","summaryTitle":"Preferred Technology","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the preffered technologies","required":true},{"condition":"details.dsIdeation.preferredTechnologies contains 'other'","fieldName":"details.dsIdeation.techPlatforms","icon":"question","description":"","title":"Describe which technologies or platforms you’d like to use","type":"textbox","summaryTitle":"Other Technologies","validationError":"Please, provide technologies or platforms you’d like to use"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"preferredTechnology","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.backgroundDesc","icon":"question","description":"","title":"Provide a descriptive background of the problem.","type":"textbox","summaryTitle":"Problem Background","required":true,"validationError":"Please, provide a descriptive background of the problem"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"problemBackgroundDesc","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.academicPapers","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Are there academic papers or other sources that should be considered as inputs for your project?","type":"radio-group","summaryTitle":"Academic Papers"},{"condition":"(details.dsIdeation.academicPapers == 'yes')","fieldName":"details.dsIdeation.urls","icon":"question","description":"","theme":"light","title":"Please list URLs to academic papers or other sources. ","type":"textbox","summaryTitle":"Academic URLs","required":true,"validationError":"Please, list URLs to academic papers or other sources."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"academicPapers","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.solutionOptimizationApproach","icon":"question","options":[{"description":"","label":"Sourcing new ideas ","value":"newIdeas"},{"description":"","label":"Filtering out options so I can focus on the most promising way forward","value":"filteringOut"}],"description":"","theme":"light","title":"What is more important, sourcing many new ideas or filtering out options?","type":"radio-group","summaryTitle":"New Ideas V/S Filtering Options"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"solutionOptimizationApproach","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.dataAvailable","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have data that you can provide?","type":"radio-group","summaryTitle":"Data Available"},{"condition":"(details.dsIdeation.dataAvailable == 'yes')","fieldName":"details.dsIdeation.dataFormat","icon":"question","description":"","title":"Describe the data’s format, size, and the steps you’ll need to take to share it.","type":"textbox","summaryTitle":"Data format & other details"},{"condition":"(details.dsIdeation.dataAvailable == 'yes')","fieldName":"details.dsIdeation.pIIData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data contain PII?","type":"radio-group","summaryTitle":"PII Data"},{"condition":"(details.dsIdeation.dataAvailable == 'yes')","fieldName":"details.dsIdeation.dataModifications","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data need to be further obfuscated or privatized","type":"radio-group","summaryTitle":"Data Obfuscated/Privatized"},{"condition":"(details.dsIdeation.dataModifications == 'yes')","fieldName":"details.dsIdeation.dataModificationsDesc","icon":"question","description":"","theme":"light","title":"Briefly describe the additional obfuscation/privatization required.","type":"textbox","summaryTitle":"Obfuscation/Privatization Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsIdeation.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria you would like to use for deciding winning options."},{"fieldName":"details.dsIdeation.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Ideation","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-06-24T10:25:40.000Z","updatedAt":"2020-05-05T09:59:37.554Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":108,"name":"ritz","key":"ritz","category":"quality_assurance","subCategory":null,"metadata":{},"icon":"ritz","question":"ritz","info":"ritz","aliases":["ritz"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"A project is supposed to be created here, isn't it","id":"projectName","title":"Project Name ","type":"project-name","required":true,"validationError":"Please provide a name for your project - you provide"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description for your project must be provided","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications). Ok off adf dfdsfsdfasdsdfsdfasdfasdf","id":"notes","title":"Notes","type":"notes"}],"description":"A description of the project review project","id":"appDefinition","title":"Project Review Project","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-04-24T10:49:27.000Z","updatedAt":"2020-05-05T09:59:37.461Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":223,"name":"QA Services","key":"qa-v1.2","category":"unscoped-solutions","subCategory":null,"metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Choose the QA solution that meets your testing goals.","aliases":["qa-oct"],"scope":{"buildingBlocks":{"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3875","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"7438","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8256","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1620","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9704","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1468","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2539","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3257","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"7507","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4348","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3237","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"4356","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"7252","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"5377","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"9569","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1997","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"PERFORMANCE_TESTS":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"2059","minTime":20,"conditions":"(PERFORMANCE_TESTING)"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2001","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"1694","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5778","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9665","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4832","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6774","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"4237","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"7543","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9944","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"5035","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6273","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"838","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4945","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5882","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7062","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"QA & Testing: Basic Details"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Structured testing is used to deliver our Regression Testing and End-User Acceptance/Beta Testing solutions.

Unstructured testing is used to deliver our Compatibility Testing, Exploratory Testing, Accessibility Testing, Localization/Language Testing, Functional/Feature Testing, and User Sentiment Analysis solutions. Unstructured testing does not use pre-defined test scripts -- this is true “in-the-wild” testing that can provide many forms of feedback on your application.

Regression Automation test suites can be created by Topcoder using tools like Selenium.

Automation Test Suites can be created by Topcoder using tools like Selenium, starting at up to 50 test cases.

Performance Testing by Topcoder will allow you to test several key functions of your application at scale with hundreds of virtual users. Reporting will be provided with specific recommendations to address any performance issues.

Mobility Testing can target up to 5 devices using our community of QA experts.

"},"fieldName":"details.appDefinition.qaType","icon":"question","options":[{"queryParamSelectCondition":"qaType == 'regression'","description":"Validate business-critical workflows in a structured manner","label":"Regression Testing","value":"regression-testing"},{"queryParamSelectCondition":"qaType == 'end-user-acceptance-testing'","summaryLabel":"Acceptance Testing","description":"Expand risk coverage and generate end-user feedback early in the life cycle","label":"End-User Acceptance Testing/Beta Testing ","value":"end-user-acceptance-testing"},{"queryParamSelectCondition":"qaType == 'compatibility-testing'","description":"Cross-browser, device testing including network, geographical coverage to assure app launch success","label":"Compatibility Testing","value":"compatibility-testing"},{"queryParamSelectCondition":"qaType == 'exploratory-testing'","description":"Validate functionality and usability of web and mobile apps in-the-wild with real-life users","label":"Exploratory Testing","value":"exploratory-testing"},{"queryParamSelectCondition":"qaType == 'accessibility-compliance'","description":"WCAG 2.1 standards-based usability testing and verification to confirm and guide to compliance","label":"Accessibility Testing","value":"accessibility-testing"},{"queryParamSelectCondition":"qaType == 'localization-testing'","description":"Validate the product (UI, Content) built for a particular culture or locale settings","label":"Localization/Language Testing","value":"localization-testing"},{"queryParamSelectCondition":"qaType == 'functional-feature-testing'","description":"Testing features in an agile environment to speed-up design and execution activities","label":"Functional/Feature Testing","value":"functional-testing"},{"queryParamSelectCondition":"qaType == 'sentiment-analysis'","description":"Compare applications with competitor products in the market to derive improvement actions","label":"User Sentiment Analysis","value":"sentiment-analysis"},{"queryParamSelectCondition":"qaType == 'regression-automation'","description":"Build reusable test scripts and frameworks using open source tools to accelerate app delivery & improve ROI","label":"Regression Automation","value":"regression-automation"},{"queryParamSelectCondition":"qaType == 'performance-improvement'","description":"Test responsiveness and stability of web and mobile applications under specific workloads","label":"Performance Testing","value":"performance-testing"},{"queryParamSelectCondition":"qaType == 'mobile-app-certification'","description":"Execute functional & non-functional tests including device compatibility certification & competitive analysis","label":"Mobile App Certification","value":"mobile-app-certifcation"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","summaryTitle":"QA Service","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","description":"","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","options":[{"description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"condition":"details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis'","fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 10 screens?","type":"radio-group","validationError":"Please, ley us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-automation'","fieldName":"details.appDefinition.needAdditionalRegressionTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 50 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 50 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalRegressionTests == 'yes'","fieldName":"details.appDefinition.regressionAutomationTestCount","icon":"question","options":[{"label":"50-100","value":"50-100"},{"label":"100-150","value":"100-150"},{"label":"150-200","value":"150-200"},{"label":"200-250","value":"200-250"},{"label":"250-300","value":"250-300"},{"label":"300+","value":"300+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"condition":"details.appDefinition.qaType == 'performance-testing'","fieldName":"details.appDefinition.concurrentUsers","icon":"question","options":[{"label":"Up to 500","value":"upto-500"},{"label":"500-1000","value":"500-1000"},{"label":"1000-5000","value":"1000-5000"},{"label":"5000+","value":"above-5000"}],"description":"","theme":"light","validations":"isRequired","title":"What is the desired system load of concurrent users?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"condition":"details.appDefinition.qaType == 'performance-testing'","fieldName":"details.appDefinition.processTransactionCount","icon":"question","options":[{"label":"Up to 5","value":"upto-5"},{"label":"5-10","value":"5-10"},{"label":"10-25","value":"10-25"},{"label":"25+","value":"above-25"}],"description":"","theme":"light","validations":"isRequired","title":"Approximately how many business processes/transactions are included in this performance testing?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"description","icon":"question","description":"","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description"},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Quality Assurance","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-10-03T04:52:03.000Z","updatedAt":"2020-05-05T09:59:37.462Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":32,"name":"Enterprise Mobile","key":"cs_enterprise_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Enterprise Mobile","aliases":["cs_enterprise_mobile","cs-enterprise-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Can you provide a brief summary of the application you’d like to develop?","id":"projectInfo","validations":"isRequired,minLength:160","title":"App Summary","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS App - An app built for iPhone or iPads","value":"ios"},{"label":"Android App - An app built for mobile phones or tablets running Android.","value":"android"},{"label":"Hybrid App - An app built using a hybrid framework (ex. Ionic/Cordova/Xamarin) and exported to one or more operating systems (iOS, Android or both).","value":"hybrid"},{"label":"Mobile Web App - An app that is accessed by using a mobile web browser like Safari or Chrome.","value":"web"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.workflow","description":"Please describe the ideal workflow for the proposed solution.","title":"Workflow","type":"textbox"},{"fieldName":"details.appDefinition.objectives","description":"What are the main business objectives you want to achieve by developing this application?","title":"Objectives","type":"textbox"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet Device - Portrait","value":"tablet-device-portrait"},{"label":"Tablet Device - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"Form Factor/Orientation","type":"checkbox-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.designGuidelines.Styleguide","title":"Do you have a style guide or branding guidelines that need to be followed?","type":"textbox"},{"fieldName":"details.designGuidelines.fonts","title":"Are there any particular fonts you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.colors","title":"Are there any particular colors/themes you want used?","type":"textbox"},{"fieldName":"details.designGuidelines.appIcon","title":"Do you need an app icon designed, or will you provide one?","type":"textbox"}],"description":"","title":"Style Guide & Brand Guidelines - Please add your answers below. If you do not know the answer, please add “Open to suggestions from the community/looking for creative solutions”","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.userRoles.standard","title":"Standard User","type":"textbox"},{"fieldName":"details.userRoles.admin","title":"Admin","type":"textbox"},{"fieldName":"details.userRoles.superAdmin","title":"Super Admin","type":"textbox"}],"description":"Please select each for each user type/role. Please provide details on what the user/role should do in the Description column.","title":"User Roles - Please use the fields below to specify the type of users/roles for the application. If the role is not applicable, please enter N/A","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.integrations.api","title":"API","type":"textbox"},{"fieldName":"details.integrations.backend","title":"Backend","type":"textbox"},{"fieldName":"details.integrations.database","title":"Database","type":"textbox"}],"description":"Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","title":" - Will this application be dependant on data from another system or tool? If yes, please briefly describe that dependency here. This can include integration with an API or an existing backend/database.","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"help-faws"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"Screen / Feature List","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"Please select each required technology requirement above","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStack","title":"Technology Stack - Do you have a preferred technology stack? If yes, please list those requirements here:","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"Standard Security - Select this option if your app requires standard security.","value":"standard"},{"label":"Enterprise - Select this option if your application will house or transmit PII or sensitive data. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Vulnerability Scanning - Vulnerability scanning is a security technique used to identify security weaknesses in a computer system.","value":"vulnerability"},{"label":"Audit - Is it necessary to audit user actions? Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Confidential Information, Sensitive Financial Data or Personally Identifiable Information (PII) - Will the user be working directly with financial or other protected information such has health records?","value":"confidential"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured - Functional testing performed without test scripts. Users search on their own for bugs or usability issues.","value":"rw-unstructured"},{"label":"Real World Testing - Structured - Test case based execution, covering all the functional requirements & cross-browser device testing.","value":"rw-structured"},{"label":"Test Cases/Scenarios - Creation of test cases/test scenarios including scenario setup, pre/post conditions to scenario, instructions to execute scenario, and expected results","value":"testcases"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"Performance Tuning - Analyze and identify performance issues, actionable items for improvement.","value":"performanceTesting"}],"description":"Please select each for each required QA requirement.","title":"Quality Assurance, Test Data & Performance Testing","type":"checkbox-group"},{"fieldName":"details.qaTesting.users","icon":"question","title":"How many users do you intend to support?","type":"textbox","required":false},{"fieldName":"details.qaTesting.data","icon":"question","options":[{"title":"We will provide obfuscated data","value":"create"},{"title":"Topcoder will create data","value":"provide"}],"title":"Do you intend to supply test data or should Topcoder create it?","type":"slide-radiogroup","required":false},{"fieldName":"details.qaTesting.uat","icon":"question","options":[{"label":"1 UAT/Beta Test Cycle.","value":"uat"},{"label":"Implementation of Updates (update the app based on UAT/Beta Testing feedback)","value":"uat-updates"}],"description":"UAT is the process of sharing the final application with users and gathering feedback. Please select each required UAT requirement.","title":"User Acceptance / Beta Testing","type":"checkbox-group"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your app by?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:52:22.000Z","updatedAt":"2020-05-05T09:59:37.461Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":23,"name":"Zurich Mobile","key":"enterprise_mobile","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-app-app.svg","question":"What do you need to develop?","info":"Zurich Mobile App","aliases":["kubik_mobile","kubik-mobile"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Briefly describe the application we are developing.","id":"projectInfo","validations":"isRequired,minLength:160","title":"Application Overview","type":"textbox","required":true},{"fieldName":"details.appDefinition.appType","icon":"question","options":[{"label":"iOS App - An app built for iPhone or iPads","value":"ios"},{"label":"Android App - An app built for mobile phones or tablets running Android.","value":"android"},{"label":"Desktop web browser application - An app built to be accessed over the web using a desktop browser such as Chrome, Safari and MS Explorer","value":"desktop-web-browser"},{"label":"Responsive web application - An app built to be accessed over the web using a desktop, tablet or mobile browser such as Chrome, Safari and MS Explorer. The application will render on multiple devices types, with a optimized screen for each type of device.","value":"responsive-web-application"},{"label":"Progressive web application - An app that is accessed by using a mobile web browser like Safari or Chrome, but that provides a native mobile app experience (rich features, i.e access device features such as GPS).","value":"progressive-web-application"},{"label":"Other","value":"other"}],"description":"What type of application are we developing? Please the required app type. Please note that each additional app type incurs a cost, but that the cost will be detailed and broken out in the final project proposal. ","title":"App Type","type":"checkbox-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"label":"Native - An app built for phones or tablets using native iOS or Android (vs. a hybrid framework such has Ionic). ","value":"native"},{"label":"Hybrid - An app built for phones or tablets using a hybrid framework such has Ionic.","value":"hybrid"}],"description":"","title":"If you need a mobile application, please indicate if it should be native or hybrid","type":"checkbox-group"},{"fieldName":"details.appDefinition.formFactor","icon":"question","options":[{"label":"Mobile Phone - Portrait","value":"mobile-phone-portrait"},{"label":"Mobile Phone - Landscape","value":"mobile-phone-landscape"},{"label":"Tablet - Portrait","value":"tablet-device-portrait"},{"label":"Tablet - Landscape","value":"tablet-device-landscape"}],"description":"Please select each for each form factor/orientation that must be supported.","title":"If you need a mobile application, please indicate the devices you require the application to work on.","type":"checkbox-group"},{"fieldName":"details.userRoles.requiresAdminInterface","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Will your application require an admin interface?","type":"radio-group"},{"fieldName":"details.integrations.requiresIntegration","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Will your application require integrations to APIs, internal systems, or databases?","type":"radio-group"}],"description":"","id":"user","title":"Questions","type":"questions","required":true},{"hideTitle":false,"questions":[{"fieldName":"details.techstack.languages","title":"Programming Languages","type":"textbox"},{"fieldName":"details.techstack.frameworks","title":"Frameworks","type":"textbox"},{"fieldName":"details.techstack.Database","title":"Database","type":"textbox"},{"fieldName":"details.techstack.server","title":"Server","type":"textbox"},{"fieldName":"details.techstack.hosting","title":"Hosting Environment","type":"textbox"},{"fieldName":"details.techstack.others","title":"Others","type":"textbox"}],"description":"Do you have a preferred technology stack? If yes, please list those requirements here:","id":"techStackGeneral","title":"Do you have a preferred technology stack for programming languages, frameworks, database, servers, middleware, API manager or hosting environments?","type":"questions","required":false},{"hideTitle":false,"questions":[{"fieldName":"details.appDefinition.screens","icon":"question","options":[{"label":"Enterprise Login - Supports integration with an existing authorization/authentication mechanism.","value":"enterprise-login"},{"label":"Email Login - Support sign in using an email address/password.","value":"email-login"},{"label":"Social Login - Support register and login using third-party services such as Facebook, Twitter, and Google.","value":"social-login"},{"label":"Registration - Allow users to register and login using their email address and a password. Users can also change their password or recover a forgotten one.","value":"registration"},{"label":"Invitations - Allow users to invite others to use your app via email. ","value":"invitations"},{"label":"Introductions - Present your app and inform users of core functionality using a series of introductory screens before they sign up.","value":"introductions"},{"label":"Onboarding - Virtually walk your users through your application. This functionality is especially useful if you need new users to set up an account or express preferences after they sign up.","value":"onboarding"},{"label":"Search - Provide the ability to search your app for specific content, such as products, members, or locations. Please specify below if you also would like autocomplete--suggesting appropriate search terms as a user starts typing.","value":"search"},{"label":"Location Based Services - App must support the identification of the users geographic location for location based features. Ex. show store locations on a map or illustrating the progress of a delivery.","value":"location-based-services"},{"label":"Camera (Audio & Video) - Add this feature if your app will require using the camera to capture audio or video.","value":"camera"},{"label":"File Upload - Allow users to upload photos or other files.","value":"file-upload"},{"label":"Notifications - Take advantage of notifications; for example, remind users to do certain tasks or update them on new content.","value":"notifications"},{"label":"Dashboard - App must have a central dashboard where users can access functionality","value":"dashboard"},{"label":"Tagging - Allow users to tag products, people or content; for example, in order to classify and easily retrieve notes.","value":"tagging"},{"label":"Account Settings - Allow your users to adjust settings or specify preferences, such as communication frequency.","value":"account-settings"},{"label":"Help/FAQs - Include a section dedicated to FAQ or Help content.","value":"Help/FAQs"},{"label":"Marketplace - Allow users to buy, sell, or rent products or services.","value":"marketplace"},{"label":"Ratings & Reviews - Let users rate or review people, products, or services.","value":"ratings-reviews"},{"label":"Payments - Allow users to pay in some way; for example, using credit cards, PayPal, or Bitcoin.","value":"payments"},{"label":"Shopping Cart - Allow users to save items before purchasing. Please specify your desired functionality below.","value":"shopping-cart"},{"label":"Product Listing - Add this feature to shows lists of product or services, with individual detail pages for each one.","value":"product-listing"},{"label":"Activity Feed - Show your users an activity feed of some kind, as they’re used to seeing on Facebook and Twitter, for example.","value":"activity-feed"},{"label":"Profiles - Add this feature if your app requires users to have a profile, including the ability to edit it.","value":"profiles"},{"label":"Messaging - Allow direct communication between two or more users.","value":"messaging"},{"label":"Admin Tool - App must have an administrative tool or panel to enable direct management of users, content and the application.","value":"admin-tool"},{"label":"Social Media Integration - App must integrate with social media providers (Facebook, Instagram, Twitter, Google+, etc)","value":"social-media-integration"},{"label":"Reporting - App must have the ability to report/export data","value":"reporting"},{"label":"Contact Us - App must have the ability to allow users to contact an administrator/send feedback to administrators.","value":"contact-us"},{"label":"3D Touch - If this is an iOS App -- should the designers make use of 3D Touch?","value":"3d-touch"}],"description":"","title":"","type":"checkbox-group"},{"fieldName":"details.appDefinition.techFeatures","icon":"question","options":[{"label":"SSO Integration - App must integrate with enterprise single-sign-on capability.","value":"enterprise-login"},{"label":"API Integration - App must integrate with a pre-existing API.","value":"api-integration"},{"label":"Third Party System Integration - App must integrate with an external application or system and either retrieve or post data.","value":"third-party-system-integration"},{"label":"Containerized Code - The codebase must be containerized via Docker to allow for easier deployment and maintenance.","value":"containerized-code"},{"label":"Unit Tests - App must have unit tests to ensure code coverage.","value":"unit-tests"},{"label":"Continuous Integration / Continuous Deployment - Establishment of a CI/CD pipeline.","value":"continuous-integration-/-continuous-deployment"},{"label":"Analytics Implementation - Implementation of analytics to track user behavior and app usage.","value":"analytics-implementation"},{"label":"Email (SMTP Server) Setup - Development and configuration of an SMTP server to provide email notifications. Design, content and development of the emails will need to be handled separately.","value":"email-(smtp-server)-setup"},{"label":"Offline Capability - Ability to use features of the application offline, and have the data persist/saved locally and then sent back to a server for syncing.","value":"offline-capability"},{"label":"Minimal Battery Usage Implementation - Update to the core features of a mobile application to support the ability to minimize usage of network bandwidth and battery usage.","value":"camera"},{"label":"Apple App Store & Google Play Submission Support - Consulting support to help streamline the app publishing process to Apple App Store or Google Play.","value":"apple-app-store-&-google-play-submission-support"},{"label":"SMS Gateway Integration - App must integrate with an external SMS gateway/provider for notifications via SMS.","value":"sms-gateway-integration"},{"label":"Error Logging - Does the application need error logging (this will log all errors, exceptions, warnings, debug information during the application execution and will be helpful to rectify the issues)?","value":"error-logging"},{"label":"Face ID / Touch ID -- If this is an iOS App -- should we support Face ID/Touch ID for login","value":"faceid-touchid"}],"description":"","title":"Technology Requirements","type":"checkbox-group"}],"description":"","id":"screen-features","title":"Screen and Features","type":"questions","required":false},{"hideTitle":true,"questions":[{"fieldName":"details.qaTesting.security","options":[{"label":"“Enterprise-Grade Security - Recommended if your application will house or transmit personal information personally identifiable information (PII) or sensitive data, such as financial data or health records. The data will be encrypted on the device and the server.","value":"enterprise"},{"label":"Auditing will keep a record of specific user actions like data creation/modification and will be helpful in identifying which user performed a particular action.","value":"auditing"},{"label":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","value":"mdm"}],"description":"Please select each required security requirement above.","title":"Security Requirements","type":"checkbox-group"},{"fieldName":"details.qaTesting.employMDMSolution","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Mobile Device Management (MDM) - Do you employ an MDM solution? If yes, what service do you use?","type":"radio-group"},{"condition":"details.qaTesting.employMDMSolution == 'yes'","fieldName":"details.qaTesting.mdmSolution","title":"Mobile Device Management (MDM) Details","type":"textinput"},{"fieldName":"details.qaTesting.testing","icon":"question","options":[{"label":"Real World Unstructured Testing - Functional testing performed without test scripts. Users search for their own bugs or usability issues.","value":"rw-unstructured"},{"label":"Real world Structured Testing - Test case creation and execution, covering all functional requirements and cross-browser testing.","value":"rw-structured"},{"label":"App Certification - Certify your mobile application release against predefined device set including; --App profiling to see the device vital monitoring – CPU, battery and memory usage of APP; --App behavior analysis in different modes (inactive, active, low battery, ); --App performance under various interrupts, under simulated network conditions, etc. ","value":"certification"},{"label":"Mobile Device Lab on Hire - Allows you to remotely access devices in real cell networks across the world","value":"devicelab"},{"label":"Performance Testing - Testing web application’s robustness, availability, and reliability for defined business scenarios and concurrent users.","value":"performanceTuning"},{"label":"UAT Test Cycle - Plan a beta test cycle where your company’s users can perform quality assurance testing and bug fixes/enhancements can be implemented based upon user feedback.","value":"uat-cycle"}],"description":"Quality matters to Topcoder. With any development project that Topcoder executes, standard quality assurance practices (Include more description) are included in the delivery process to ensure quality. The options below are additional quality assurance testing that you can include in the scope of your project. Please note that each added feature may incur a cost, but that the cost will be detailed and broken out in the final project proposal.","title":"Quality Assurance","type":"checkbox-group"},{"fieldName":"details.qaTesting.requiresTestDataCreation","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"title":"Test Data - Should we create test data as part of the project, or will you provide obfuscated test data?","type":"radio-group"},{"fieldName":"details.qaTesting.userCount","title":"User Count - How many users do you anticipate the application will have?","type":"numberinput"}],"description":"","title":"Quality Assurance, Testing and Security","type":"questions"},{"hideTitle":false,"questions":[{"fieldName":"details.loadDetails.budget","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"$100K+","value":"above-100"}],"description":"How much budget do you have?","title":"Budget","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.loadDetails.timeline","icon":"question","options":[{"title":"Under 1 month","value":"upto-1month"},{"title":"1 to 2 months","value":"upto-2months"},{"title":"2 to 3 months","value":"upto-3months"},{"title":"3 to 6 months","value":"upto-6months"}],"description":"When do you need your solution?","title":"Timeline","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","title":"Budget and Timeline","type":"questions"},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Enterprise Mobile","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"enterprise_mobile":{"duration":10,"name":"Enterprise Mobile","products":[{"id":6,"productKey":"enterprise_mobile"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-11-12T12:49:27.000Z","updatedAt":"2020-05-05T09:59:37.553Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":94,"name":"New App with Updated designs","key":"app-new-updated-designs","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["app-new-updated-designs"],"scope":{"buildingBlocks":{"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"price":"10043","minTime":40,"conditions":"( (HAS_DEV_DELIVERABLE || HAS_QA_DELIVERABLE) && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"MEDIDUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"price":"5153","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"price":"3079","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"price":"5411","minTime":45,"conditions":"( (HAS_DEV_DELIVERABLE || HAS_QA_DELIVERABLE) && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"price":"2432","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"price":"1142","minTime":35,"conditions":"( (HAS_DEV_DELIVERABLE || HAS_QA_DELIVERABLE) && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"}},"preparedConditions":{"ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && ((details.appDefinition.deliverables hasLength 3) || ((details.appDefinition.deliverables hasLength 4) && (details.appDefinition.deliverables contains 'qa')))","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","QUICK_DESIGN_3_Days":"(details.appDefinition.quickTurnaround == 'under-3-days')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 1)","DESIGN_DEV_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables contains 'deployment') && (details.appDefinition.deliverables hasLength 3)","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","QUICK_DESIGN_6_Days":"(details.appDefinition.quickTurnaround == 'under-6-days')","ONLY_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 1) || ((details.appDefinition.deliverables hasLength 2) && (details.appDefinition.deliverables contains 'qa') ))","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DESIGN_DEV_OR_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && ((details.appDefinition.deliverables hasLength 2) || ((details.appDefinition.deliverables hasLength 3) && (details.appDefinition.deliverables contains 'qa')))","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","ONLY_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 1)","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","ONLY_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables hasLength 1)","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_DESIGN_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'design') && (details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 2)","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","ONLY_DEV_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa') && (details.appDefinition.deliverables hasLength 1)"},"priceConfig-old":{"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":55,"price":9511,"minTime":55},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":90,"price":3726,"minTime":90},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":6179,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":9703,"minTime":80},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":12,"price":3659,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":5940,"minTime":72},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":3,"price":6538,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":52,"price":9650,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":2139,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":3095,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":1245,"minTime":59},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":19,"price":2676,"minTime":19},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":45,"price":172,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":1942,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":3378,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":44,"price":4345,"minTime":44},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":4232,"minTime":67},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":12,"price":4557,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":9672,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":64,"price":2838,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":2970,"minTime":52},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":22,"price":7635,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":8023,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":65,"price":3135,"minTime":65},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":30,"price":3718,"minTime":30},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":88,"price":6596,"minTime":88},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":2897,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":14,"price":6616,"minTime":14},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":7224,"minTime":62},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":52,"price":1414,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":59,"price":8290,"minTime":59},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":773,"minTime":49},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":67,"price":8190,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":9828,"minTime":72},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":10,"price":2526,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":8321,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":3698,"minTime":62},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":30,"price":8313,"minTime":30},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":835,"minTime":72},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":50,"price":4650,"minTime":50},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":54,"price":2273,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":6684,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":62,"price":2312,"minTime":62},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":12,"price":5672,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":2025,"minTime":57},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":2947,"minTime":49},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)":{"maxTime":40,"price":6692,"minTime":40},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":6452,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":9726,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":55,"price":1838,"minTime":55},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":3071,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":1076,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":73,"price":3695,"minTime":73},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":8502,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":83,"price":2503,"minTime":83},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":1502,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":60,"price":9715,"minTime":60},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":14,"price":8076,"minTime":14},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":22,"price":2608,"minTime":22},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":530,"minTime":62},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":4185,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":70,"price":7251,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":5071,"minTime":54},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":25,"price":1962,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":6775,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":9903,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":4096,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":8060,"minTime":70},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":4454,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":60,"price":2481,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":70,"price":5771,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":62,"price":2962,"minTime":62},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":40,"price":2393,"minTime":40},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":4944,"minTime":49},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":9,"price":3306,"minTime":9},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":2535,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":1313,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":22,"price":4514,"minTime":22},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":25,"price":7593,"minTime":25},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":25,"price":2853,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":5230,"minTime":80},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":40,"price":6822,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":72,"price":1975,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":85,"price":5332,"minTime":85},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":4748,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":3405,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":1814,"minTime":67},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":13,"price":4729,"minTime":13},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":52,"price":4103,"minTime":52},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":62,"price":5922,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":73,"price":9062,"minTime":73},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":13,"price":2042,"minTime":13},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":9484,"minTime":75},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":67,"price":1130,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":62,"price":8764,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":1271,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":7238,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":5432,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":2958,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":93,"price":8259,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":4213,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":8800,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":4032,"minTime":54},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":50,"price":9514,"minTime":50},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":4076,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":90,"price":4995,"minTime":90},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":2816,"minTime":59},"( ONLY_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":10,"price":1342,"minTime":10},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":52,"price":5163,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":88,"price":10085,"minTime":88},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":45,"price":4361,"minTime":45},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":40,"price":5675,"minTime":40},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":45,"price":4251,"minTime":45},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":12,"price":6088,"minTime":12},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":5472,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":2950,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":8879,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":60,"price":4348,"minTime":60},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":44,"price":3734,"minTime":44},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NEEDED )":{"maxTime":3,"price":2978,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":59,"price":8712,"minTime":59},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":93,"price":1292,"minTime":93},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":78,"price":8106,"minTime":78},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":3675,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":246,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":49,"price":8113,"minTime":49},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_Days && CA_NOT_NEEDED )":{"maxTime":3,"price":877,"minTime":3},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":72,"price":2288,"minTime":72},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":65,"price":5308,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":47,"price":4794,"minTime":47},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":19,"price":1368,"minTime":19},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":57,"price":2342,"minTime":57},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)":{"maxTime":45,"price":1395,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":68,"price":928,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":80,"price":3987,"minTime":80},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":40,"price":8765,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":65,"price":2540,"minTime":65},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":57,"price":1982,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":3597,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":52,"price":4629,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":57,"price":3021,"minTime":57},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NOT_NEEDED )":{"maxTime":6,"price":8572,"minTime":6},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && CA_NEEDED )":{"maxTime":57,"price":7615,"minTime":57},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)":{"maxTime":35,"price":9773,"minTime":35},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":57,"price":106,"minTime":57},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )":{"maxTime":65,"price":7263,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":7929,"minTime":67},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":67,"price":7687,"minTime":67},"( ONLY_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_Days && CA_NEEDED )":{"maxTime":6,"price":4789,"minTime":6},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":25,"price":4918,"minTime":25},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":78,"price":2648,"minTime":78},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)":{"maxTime":35,"price":4220,"minTime":35},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && HAS_INTERNAL_DEPLOYMENT && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":52,"price":6458,"minTime":52},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":70,"price":638,"minTime":70},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)":{"maxTime":45,"price":6610,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":62,"price":1115,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":83,"price":9897,"minTime":83},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":9,"price":6387,"minTime":9},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":54,"price":2802,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":47,"price":2424,"minTime":47},"( ONLY_DEV_OR_QA_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)":{"maxTime":40,"price":7645,"minTime":40},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":85,"price":1429,"minTime":85},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":75,"price":7383,"minTime":75},"( ONLY_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":3,"price":112,"minTime":3},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":70,"price":3511,"minTime":70},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )":{"maxTime":54,"price":1218,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":67,"price":2592,"minTime":67},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":65,"price":7005,"minTime":65},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":68,"price":1533,"minTime":68},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":64,"price":4909,"minTime":64},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_MEDIUM && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":65,"price":127,"minTime":65},"( ONLY_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )":{"maxTime":22,"price":8708,"minTime":22},"( ONLY_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )":{"maxTime":45,"price":9070,"minTime":45},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":1385,"minTime":80},"( ONLY_DESIGN_DEV_OR_QA_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )":{"maxTime":49,"price":7311,"minTime":49},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && ONLY_TWO_OS_MOBILE_DESKTOP && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && CA_NEEDED )":{"maxTime":57,"price":6412,"minTime":57},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":75,"price":1542,"minTime":75},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE || ONLY_ONE_OS_DESKTOP) && SCREENS_COUNT_LARGE && HAS_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":60,"price":9371,"minTime":60},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && TWO_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":77,"price":9148,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":77,"price":8212,"minTime":77},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )":{"maxTime":54,"price":9781,"minTime":54},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":2745,"minTime":62},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && THREE_TARGET_DEVICES && (ONLY_TWO_OS_MOBILE || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":80,"price":7402,"minTime":80},"( DESIGN_DEV_OR_QA_DEPLOY_DELIVERABLE && ONE_TARGET_DEVICE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )":{"maxTime":62,"price":872,"minTime":62}},"basePriceEstimate":21000,"priceConfig":[{"blocks":["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],"conditions":"ONE_DELIVERABLE"},{"blocks":["SMALL_DEV_ONE_OS_NO_CA"],"conditions":"ONE_DELIVERABLE"},{"blocks":["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],"conditions":"TWO_DELIVERABLES"}],"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","label":"Design","value":"design"},{"summaryLabel":"Development","label":"App Development","value":"dev-qa"},{"summaryLabel":"QA","label":"QA, Fixes & Enhancements","value":"qa"},{"label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'design') && (!(details.appDefinition.deliverables contains 'dev-qa'))","options":[{"summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.designGoal == 'concept-designs' )","fieldName":"details.appDefinition.quickTurnaround","icon":"question","options":[{"summaryLabel":"3 days","minTimeUp":0,"description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days","maxTimeUp":0},{"summaryLabel":"7 days","minTimeUp":3,"description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days","maxTimeUp":3}],"description":"","theme":"light","validations":"isRequired","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","validationError":"Please, choose your time expectations.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","fieldName":"details.appDefinition.nativeHybrid","icon":"question","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Does your app need to be Native or Hybrid?","type":"radio-group"},{"help":{"linkTitle":"What is responsive?","title":"What is responsive?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","fieldName":"details.appDefinition.progressiveResponsive","icon":"question","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"Should your web app be progressive or responsive?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","theme":"light","validations":"isRequired","title":"How many screens do you need?","type":"radio-group","validationError":"Please let us know the number of screens required?","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"hideTitle":true,"questions":[{"layout":"vertical","condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","title":"What type of QA you need?","type":"radio-group"},{"layout":"horizontal","condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","title":"What do you need us to help you with?","type":"checkbox-group"},{"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","title":"How many test cases do you need?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","title":"How many screens need to be tested?","type":"radio-group"},{"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","title":"How many test cases do you need?","type":"radio-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"layout":"horizontal","condition":"details.appDefinition.deliverables contains 'deployment'","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'ios') )","label":"Apple App Store","value":"apple-app-store"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'android') )","label":"Google Play","value":"google-play"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","title":"Where do you need your app deployed?","type":"checkbox-group"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"( (!( details.appDefinition.targetDevices hasLength 1 )) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"fieldName":"details.appDefinition.message","hideTitle":true,"description":"If you are done with requirements for your projects please review and continue to create project.","id":"message","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Sample project timeline","deliverables":[{"duration":3,"id":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'design')","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"generic"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'development')","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"generic"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'qa')","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"generic"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.mainWork contains 'deployment')","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"gtest"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Sample project timeline","deliverables":[{"duration":3,"id":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-02-19T12:26:37.000Z","updatedAt":"2020-05-05T09:59:37.554Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":95,"name":"New app - updated design 2","key":"app-new-updated-designs-2","category":"app","subCategory":null,"metadata":{},"icon":"test","question":"test","info":"test","aliases":["app-new-updated-designs-2","anud2"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4725","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8368","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"3294","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1041","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"5836","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"8801","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"2135","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8071","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"5336","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6265","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"5080","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4829","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"5522","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9207","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6214","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2663","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4384","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4968","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"8927","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"1965","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7445","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"10008","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"7486","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3139","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5840","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1495","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8600","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"5416","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"1235","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3174","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4649","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3825","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"7762","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"4937","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"1369","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8169","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7776","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"8645","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"1103","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8609","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1847","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9301","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"237","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9478","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1794","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"518","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"5661","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"9214","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7799","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2615","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"5774","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"467","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9372","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9847","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"6343","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"3613","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2696","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4760","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6674","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2229","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"505","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8145","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"10084","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"1974","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5734","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7379","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8317","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"2830","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"7064","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"336","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"279","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4243","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8110","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4475","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6779","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6315","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"945","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"10012","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5815","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"821","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"6977","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3772","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9440","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"3812","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4864","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8101","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"2320","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"5068","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"3961","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"4894","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2490","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"1310","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6175","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9164","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6971","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9873","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"8560","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"5388","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6785","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"4502","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"8057","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"4520","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3088","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"1828","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9123","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"9157","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"6803","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2784","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"269","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"683","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"3053","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"9117","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4277","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4831","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"563","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"2913","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"7386","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3792","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"4637","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1696","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"5131","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"223","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5586","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"5872","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"6450","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"2784","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2287","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2519","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6568","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"586","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"6047","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"6587","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"2392","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"2741","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5320","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"689","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5585","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"7619","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7374","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6989","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":21000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":24,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-02-21T11:45:39.000Z","updatedAt":"2020-05-05T09:59:37.553Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":116,"name":"Chatbot","key":"kubik_chatbot","category":"chatbot","subCategory":null,"metadata":{},"icon":"product-chatbot-chatbot","question":"What do you need to develop?","info":"Build, train and test a custom conversation for your chat bot","aliases":["kubik_chatbot","kubik-chatbot"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"questions":[{"fieldName":"details.businessUnit","description":"Business Unit or Group function (e.g. ZNA, UK, GF&SU, COMMERCIAL INSURANCE,
)","validations":"isRequired","title":"BU","type":"textinput","validationError":"Mandatory field","required":true},{"fieldName":"details.costCentre","validations":"isRequired","title":"Cost Centre","type":"textinput","validationError":"Mandatory field","required":true}],"id":"questions","title":"Business Unit & Cost Center","type":"questions","required":true},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.capabilities","icon":"question","options":[{"label":"Order management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","title":"What capabilities does the chatbot need to support?","type":"checkbox-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.integrationSystems","icon":"question","description":"","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below.","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.existingAgentScripts","icon":"question","description":"","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later).","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.transferToHumanAgents","icon":"question","description":"","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.).","type":"textbox","required":true,"validationError":"Please complete this section"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Chatbot","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-01T08:24:04.000Z","updatedAt":"2020-05-05T09:59:37.555Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":51,"name":"Other Design","key":"generic_design","category":"website","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-design-other.svg","question":"Other Design","info":"Get help with other types of design","aliases":["generic-design","generic_design"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","icon":"question","description":"Brief Description","id":"projectInfo","title":"Description","type":"textbox","required":true,"validationError":"Please provide a description"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Other Design","required":true}]},"phases":{"1-visual-design":{"duration":25,"name":"Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-12-10T11:36:24.000Z","updatedAt":"2020-05-05T09:59:37.555Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":226,"name":"TaaS (Specialists)","key":"talent-as-a-service-specialists","category":"unscoped-solutions","subCategory":null,"metadata":{"successPage":{"subTitle":"Custom Subtitle","title":"Custom Title!","messageHTML":"CUSTOM. A member of our team will be reaching out to you shortly to finalize the scope and build your project plan.

Use the link below to share your project with members of your team. You can also access all your Topcoder projects in one place from your Connect project dashboard."}},"icon":"talent-as-a-service","question":"What type of talent you are looking for?","info":"Talent as a Service (Specialists)","aliases":["talent-as-a-service-specialists"],"scope":{"addonPriceConfig":{},"basePriceEstimate":0,"priceConfig":{"HAS_NEW_PROJECT_DELIVERABLE":[["NEW_PROJECT"]]},"hideEstimation":true,"hidePrice":true,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"You need top talent to deliver on your most pressing ideas, to help you differentiate, and to get things done fast. Talent as a Service (TaaS) from Topcoder gives our customers access to the best freelancers the gig economy has to offer — without risk, expensive full time hires or wasting time deciding on designers and developers based on stars or reviews.","theme":"light","type":"message"},{"questions":[{"fieldName":"description","theme":"light","type":"textbox","title":"Tell us about your project"},{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.taasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"New Project","description":"","label":"New project or idea exploration","value":"newProject"},{"summaryLabel":"Existing Project","description":"","label":"Help on an existing project","value":"existingProject"},{"summaryLabel":"Ongoing Assistance","description":"","label":"Ongoing assistance on several projects","value":"ongoingAssistanceOnProject"},{"description":"","label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"What type of project do you need help with?","type":"checkbox-group","summaryTitle":"Talent Area","validationError":"Please, choose what do you need.","required":true},{"condition":"HAS_OTHER_DELIVERABLE","fieldName":"details.taasDefinition.otherBrief","icon":"question","description":"","title":"Please describe the type of talent you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.specialists","icon":"question","options":[{"role":"desiger","skillsCategory":"design","roleTitle":"Designer","icon":"product-cat-design"},{"role":"frontend-dev","roleTitle":"Front End Developer","icon":"product-dev-front-end-dev"},{"role":"backend-dev","skillsCategory":"develop","roleTitle":"Back End Developer","icon":"product-dev-prototype"},{"role":"fullstack-dev","skillsCategory":"develop","roleTitle":"Full Stack Developer","icon":"product-cat-development"},{"role":"qa","skillsCategory":"qa","roleTitle":"QA Tester","icon":"product-qa-crowd-testing"},{"role":"data-scientist","skillsCategory":"data_science","roleTitle":"Data Scientist","icon":"product-cat-analytics"}],"validationErrors":{"noPartialFillsExist":"Please, fill all the fields for the positions you would like to add.","oneRowHaveValidValue":"Please, choose at least one talent role."},"validations":"isRequired","title":"Tell us about your talent needs","type":"talent-picker","summaryTitle":"Talents","introduction":"If you have multiple open positions with different skills engagement duration requirements, click the + sign to the right and enter each role individually","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.separator","icon":"question","description":"","title":"Help us understand the types of help you're looking for.","type":"textbox","summaryTitle":"Help Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.specialistsOptional","icon":"question","options":[{"role":"desiger","skillsCategory":"design","roleTitle":"Designer","icon":"product-cat-design"},{"role":"frontend-dev","roleTitle":"Front End Developer","icon":"product-dev-front-end-dev"},{"role":"backend-dev","skillsCategory":"develop","roleTitle":"Back End Developer","icon":"product-dev-prototype"},{"role":"fullstack-dev","skillsCategory":"develop","roleTitle":"Full Stack Developer","icon":"product-cat-development"},{"role":"qa","skillsCategory":"qa","roleTitle":"QA Tester","icon":"product-qa-crowd-testing"},{"role":"data-scientist","skillsCategory":"data_science","roleTitle":"Data Scientist","icon":"product-cat-analytics"}],"validationErrors":{"noPartialFillsExist":"Please, fill all the fields for the positions you would like to add."},"title":"Tell us about your talent needs (optional)","type":"talent-picker","summaryTitle":"Talents (optional)","introduction":"If you have multiple open positions with different skills engagement duration requirements, click the + sign to the right and enter each role individually"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.help.brief","icon":"question","description":"","title":"Help us understand the types of help you're looking for.","type":"textbox","summaryTitle":"Help Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"skills":{"categoriesMapping":{"existingProject":"develop","other":"data_science","newProject":"design","ongoingAssistanceOnProject":"qa"},"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"fieldName":"details.taasDefinition.team.skills","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What skills are important for your team to have?","type":"skills","summaryTitle":"Team Skills","validationError":"Please, choose at least one skill.","required":true},{"condition":"HAS_OTHER_SKILLS","fieldName":"details.taasDefinition.otherSkills","icon":"question","description":"","title":"Please describe the other skills you require.","type":"textbox","summaryTitle":"Others skills"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-skills","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.tools","icon":"question","options":[{"label":"Github","value":"github"},{"label":"GitLab","value":"gitlab"},{"label":"Jira","value":"jira"},{"label":"Trello","value":"trello"},{"label":"Basecamp","value":"basecamp"},{"label":"I'm not using anything, but would love a recommendation.","value":"recommendation"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Are you using a specific tool to manage work?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one tool.","required":true},{"condition":"HAS_OTHER_TOOLS","fieldName":"details.taasDefinition.otherToolsBrief","icon":"question","description":"","title":"Please describe the type of other tools you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-tools","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.resourceHours","icon":"question","description":"","validationErrors":{"isPositiveNumber":"Please, enter a positive number."},"validations":"isPositiveNumber","title":"How many full-time (40hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Full-Time"},{"fieldName":"details.taasDefinition.partTimeresourceHours","icon":"question","description":"","validationErrors":{"isNonNegativeNumber":"Please, enter a positive number or zero."},"validations":"isNonNegativeNumber","title":"How many part-time (20hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Part-Time"},{"fieldName":"details.taasDefinition.resourceDuration","icon":"question","options":[{"label":"Less than 1 month","value":"rangeOne"},{"label":"1-3 months","value":"rangeTwo"},{"label":"3-6 months","value":"rangeThree"},{"label":"More than 6 months","value":"rangeFour"}],"description":"","theme":"light","title":"How long would you like these resources for?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."},{"fieldName":"details.taasDefinition.kickOffTime","icon":"question","options":[{"label":"I’m ready now","value":"rangeOne"},{"label":"1-2 weeks","value":"rangeTwo"},{"label":"3-4 weeks","value":"rangeThree"},{"label":"I’m not sure yet","value":"rangeFour"}],"description":"","theme":"light","title":"When do you need to start?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"talentDefinition","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.otherRequirements","icon":"question","options":[{"label":"Specific background checks","value":"specificBackgroundChecks"},{"label":"Special clearance","value":"specialClearance"},{"label":"Access to restricted development environments","value":"restrictedDevelopment"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Do you require any of the following?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one requirement.","required":true},{"condition":"HAS_OTHER_REQUIREMENT","fieldName":"details.taasDefinition.otherRequirementBrief","icon":"question","description":"","title":"Please describe any other requirement.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-otherRequirements","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Your Talent Requirements","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"newProject","deliverableKey":"newProject","title":"New Project","enableCondition":"HAS_NEW_PROJECT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null,"buildingBlocks":{"NEW_PROJECT":{"maxTime":28,"metadata":{"deliverable":"newProject"},"price":"8085","minTime":28,"conditions":"HAS_NEW_PROJECT_DELIVERABLE"}},"preparedConditions":{"HAS_DATA_SCIENCE_DELIVERABLE":"(details.taasDefinition.deliverables contains 'data-science')","HAS_DESIGN_DELIVERABLE":"(details.taasDefinition.deliverables contains 'design')","HAS_DEV_DELIVERABLE":"(details.taasDefinition.deliverables contains 'dev')","HAS_OTHER_SKILLS":"(details.taasDefinition.team.skills contains 'other')","HAS_NEW_PROJECT_DELIVERABLE":"(details.taasDefinition.deliverables contains 'newProject')","HAS_OTHER_DELIVERABLE":"(details.taasDefinition.deliverables contains 'other')","HAS_OTHER_REQUIREMENT":"(details.taasDefinition.otherRequirements contains 'other')","TRUTHY":"( 1 == 1)","HAS_QA_DELIVERABLE":"(details.taasDefinition.deliverables contains 'qa')","HAS_OTHER_TOOLS":"(details.taasDefinition.tools contains 'other')","FALSY":"( 1 == 2)"},"showPrice":false,"priceConfig-old":null,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-11-08T08:05:31.000Z","updatedAt":"2020-05-05T09:59:37.555Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":30,"name":"Wireframes 1","key":"cs_wireframes 1","category":"app","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-cat-design.svg","question":"What kind of design do you need?","info":"Plan and explore the navigation and structure of your app","aliases":["cs-wireframes"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name-advanced","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"10"},"price":2089,"icon":"NumberText","title":"screens","value":"10","desc":"7-10 days"},{"iconOptions":{"number":"15"},"price":3740,"icon":"NumberText","title":"screens","value":"15","desc":"10-12 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required?"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Wireframes","productName":"Wireframes","required":true}]},"phases":{"1-wireframe-design-i":{"duration":25,"name":"Wireframe Design, Pt. I","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"2-wireframe-design-ii":{"duration":25,"name":"Wireframe Design, Pt. II","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-03T06:48:44.000Z","updatedAt":"2020-05-05T09:59:37.556Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":227,"name":"Development Integration","key":"cs_generic_dev-V","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"Development Integration","info":"Get help with any part of your app or software","aliases":["cs-generic-development-1"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","FALSY":"1 == 2","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"hidePrice":true,"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"Tell us how Topcoder can help. Please provide as much detail as possible, so that we can accurately scope your request. As an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so after submitting your project request.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Let’s set up your project"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.purpose","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What do you need help with?","type":"textbox","summaryTitle":"Purpose","validationError":"Please, define the help you need."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.notes","icon":"question","description":"Include any additional information.","title":"Notes + Supporting Link Sharing","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Let’s set up your project","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2},{"sectionIndex":4}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-12-20T04:33:00.656Z","updatedAt":"2020-05-05T09:59:37.556Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":212,"name":"Visual Design from PROD (max)","key":"visual_design_prod_from_prod_max","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"product-design-app-visual","question":"Visual Design 1","info":"Create development-ready designs","aliases":["visual_design_prod_from_prod_max"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","options":[{"iconOptions":{"number":"1-3"},"price":6057,"icon":"NumberText","title":"screens","value":"1-3","desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"price":6417,"icon":"NumberText","title":"screens","value":"4-8","desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"price":1652,"icon":"NumberText","title":"screens","value":"9-15","desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need designed?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the number of screens required"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group","required":true,"validationError":"Please let us know the target device"},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-06-28T09:25:32.000Z","updatedAt":"2020-05-05T09:59:37.556Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":204,"name":"Data Visualization","key":"data_visualization","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

  • Existing report improved and ported to new data visualization platform
  • OR a new report or rich data visualization built to specifications
"}]},"icon":"data-visualization","question":"whata","info":"Pull the most important highlights from your data and visualize them to give decision-makers the tools they need to work smarter.","aliases":["data_visualization","data-visualization"],"scope":{"buildingBlocks":{"FREE_SIZE_DATA_VIZ_DESIGN":{"maxTime":10,"metadata":{"deliverable":"data-viz-design"},"price":"2733","minTime":10,"conditions":"( TRUTHY )"},"FREE_SIZE_DATA_VIZ_DEVELOP":{"maxTime":10,"metadata":{"deliverable":"data-viz-develop"},"price":"2552","minTime":10,"conditions":"( TRUTHY )"}},"preparedConditions":{"NEED_NEW_DESIGNS":"(details.dataVizDefinition.designWork == 'new-designs')","ASK_LICENSED_PLATFORM_REQUIRED":"( details.dataVizDefinition.deliverables == 'port-improve-existing' && !(details.dataVizDefinition.existing.platformsRequired hasLength 0) && !(details.dataVizDefinition.existing.platformsRequired hasLength 1 && (details.dataVizDefinition.existing.platformsRequired contains 'other' || details.dataVizDefinition.existing.platformsRequired contains 'existing-platform')))","ASK_LICENSED_PLATFORM_REQUIRED_NEW":"( details.dataVizDefinition.deliverables == 'create-new' && !(details.dataVizDefinition.new.platformsRequired hasLength 0) && !(details.dataVizDefinition.new.platformsRequired hasLength 1 && details.dataVizDefinition.new.platformsRequired contains 'other'))","ONE_DELIVERABLE":"( 1 == 1)","HAS_EXISTING_LICENSED_PLATFORM":"( details.dataVizDefinition.deliverables == 'port-improve-existing' && !(details.dataVizDefinition.existing.platforms hasLength 0) && !(details.dataVizDefinition.existing.platforms hasLength 1 && details.dataVizDefinition.existing.platforms contains 'other'))","CA_NEEDED":"(details.apiDefinition.caNeeded == 'yes')","HAS_PORT_EXISTING_DELIVERABLE":"(details.dataVizDefinition.deliverables == 'port-improve-existing')","HAS_NEW_REPORTS_DELIVERABLE":"(details.dataVizDefinition.deliverables == 'create-new')","TRUTHY":"( 1 == 1)","CA_NOT_NEEDED":"(details.apiDefinition.caNeeded != 'yes')","HAS_EXISTING_DESIGNS":"(details.dataVizDefinition.designWork == 'existing-designs')","HAS_SAMPLE_ADDON":"(details.apiDefinition.addons.dataViz contains '{\"productKey\":\"sample-addon\"}')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"( HAS_NEW_REPORTS_DELIVERABLE || NEED_NEW_DESIGNS )":[["FREE_SIZE_DATA_VIZ_DESIGN","FREE_SIZE_DATA_VIZ_DEVELOP"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description"},"theme":"light","validations":"isRequired","type":"textbox","title":"Describe the objectives of your Data Visualization project in 2-3 sentences.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Data Visualization"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dataVizDefinition.deliverables","icon":"question","options":[{"description":"","label":"Porting and improving an existing report","value":"port-improve-existing"},{"description":"","label":"Design and develop a new report or rich data visualization","value":"create-new"}],"description":"","theme":"light","title":"What do you need help with?","type":"radio-group","summaryTitle":"Deliverables","validationError":"Please, let us know where do you need us to help with?","required":true},{"condition":"( details.dataVizDefinition.deliverables == 'port-improve-existing' )","fieldName":"details.dataVizDefinition.designWork","icon":"question","options":[{"description":"","label":"Use existing designs","value":"existing-designs"},{"description":"","label":"Create new designs","value":"new-designs"}],"description":"","theme":"light","title":"Are we using existing designs or creating new ones?","type":"radio-group","summaryTitle":"Design Work","validationError":"Please, let us know if we are using existing designs or creating new ones?","required":true},{"fieldName":"details.dataVizDefinition.existing.platforms","icon":"question","description":"","title":"What platform were the existing reports using?","type":"checkbox-group","summaryTitle":"Existing Platforms","validationError":"Please, select the data visualization platform would you like to leverage?","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

You can leverage a common data visualization platform, such as Tableau, or Topcoder can build you a custom solution.

"},"condition":"( details.dataVizDefinition.deliverables == 'port-improve-existing' )","options":[{"label":"Tableau","value":"tableau"},{"label":"Qlik & Product Family","value":"qlik-product-family"},{"label":"Power BI","value":"power-bi"},{"label":"TIBCO/Spotfire","value":"tibco-spotfire"},{"label":"Looker","value":"looker"},{"label":"Topcoder custom solution","value":"topcoder-custom-solution"},{"label":"Other","value":"other"}],"theme":"light","introduction":"List any licensed platforms/features you use today for data visualization."},{"condition":"(details.dataVizDefinition.existing.platforms contains 'other')","fieldName":"details.dataVizDefinition.existing.otherPlatforms","icon":"question","description":"","theme":"light","title":"Please describe other existing platforms","type":"textbox","summaryTitle":"Other Existing Platforms"},{"condition":"( HAS_EXISTING_LICENSED_PLATFORM )","fieldName":"details.dataVizDefinition.existing.licensedFeatures","icon":"question","description":"","theme":"light","title":"Describe any licensed features you have with the selected platforms.","type":"textbox","summaryTitle":"Licensed Features"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

You can leverage a common data visualization platform, such as Tableau, or Topcoder can build you a custom solution.

"},"condition":"( details.dataVizDefinition.deliverables == 'port-improve-existing' )","fieldName":"details.dataVizDefinition.existing.platformsRequired","icon":"question","options":[{"label":"Same platform(s) currently being used.","value":"existing-platform"},{"label":"Tableau","value":"tableau"},{"label":"Qlik & Product Family","value":"qlik-product-family"},{"label":"Power BI","value":"power-bi"},{"label":"TIBCO/Spotfire","value":"tibco-spotfire"},{"label":"Looker","value":"looker"},{"label":"Topcoder custom solution","value":"topcoder-custom-solution"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What platform would you like us to use moving forward?","type":"checkbox-group","summaryTitle":"Visualization Platforms","validationError":"Please, select the data visualization platform would you like us to use moving forward?","required":true},{"condition":"(details.dataVizDefinition.existing.platformsRequired contains 'other')","fieldName":"details.dataVizDefinition.existing.otherPlatformsRequired","icon":"question","description":"","theme":"light","title":"What other platforms you like us to use moving forward?","type":"textbox","summaryTitle":"Other Platforms"},{"condition":"( ASK_LICENSED_PLATFORM_REQUIRED )","fieldName":"details.dataVizDefinition.existing.licensedFeaturesRequired","icon":"question","description":"","theme":"light","title":"Describe any licensed features you have with the selected platforms.","type":"textbox","summaryTitle":"Licensed Features"},{"fieldName":"details.dataVizDefinition.new.platformsRequired","icon":"question","description":"","title":"What data visualization platform would you like to leverage?","type":"checkbox-group","summaryTitle":"Visualization Platforms","validationError":"Please, select the data visualization platform would you like to leverage?","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

You can leverage a common data visualization platform, such as Tableau, or Topcoder can build you a custom solution.

"},"condition":"( details.dataVizDefinition.deliverables == 'create-new' )","options":[{"label":"Tableau","value":"tableau"},{"label":"Qlik & Product Family","value":"qlik-product-family"},{"label":"Power BI","value":"power-bi"},{"label":"TIBCO/Spotfire","value":"tibco-spotfire"},{"label":"Looker","value":"looker"},{"label":"Topcoder custom solution","value":"topcoder-custom-solution"},{"label":"Other","value":"other"}],"theme":"light","introduction":"Describe your preference and list any licensed platforms/features you use today for data visualization."},{"condition":"(details.dataVizDefinition.new.platformsRequired contains 'other')","fieldName":"details.dataVizDefinition.new.otherPlatformsRequired","icon":"question","description":"","theme":"light","title":"What other platforms you like to leverage?","type":"textbox","summaryTitle":"Other Platforms"},{"condition":"( ASK_LICENSED_PLATFORM_REQUIRED_NEW )","fieldName":"details.dataVizDefinition.new.licensedFeaturesRequired","icon":"question","description":"","theme":"light","title":"Describe any licensed features you have with the selected platforms.","type":"textbox","summaryTitle":"Licensed Features"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dataVizDefinition.targetDevices","icon":"question","options":[{"label":"Desktop","value":"desktop"},{"label":"Mobile","value":"mobile"},{"label":"Tablet","value":"tablet"}],"description":"","theme":"light","title":"Where will your data be viewed?","type":"checkbox-group","summaryTitle":"Target Devices","validationError":"Please, select the target devices?","required":true},{"fieldName":"details.dataVizDefinition.tabsCount","icon":"question","description":"","theme":"light","title":"How many separate tabs do you expect your data visualization report to have?","type":"textinput","summaryTitle":"Tabs Count"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"requirements","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dataVizDefinition.dataDetails","icon":"question","description":"","theme":"light","validations":"isRequired","title":"Briefly describe the data that will be visualized.","type":"textbox","summaryTitle":"Data Description","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What does this mean?","title":"What does this mean?","content":"

Data is considered easily accessible when it can be shared as-is with our platform through database extracts or spreadsheets and is not constrained by obfuscation, licensing, or data sensitivity.

"},"fieldName":"details.dataVizDefinition.isDataAccessible","icon":"question","options":[{"description":"","label":"Yes, the data is easily accessible.","value":"yes"},{"description":"","label":"No, the data is not easily accessible.","value":"no"}],"description":"","theme":"light","title":"Is your data easily accessible?","type":"radio-group","summaryTitle":"Is Data Accessible"},{"help":{"linkTitle":"Why obfuscate data?","title":"Why obfuscate data?","content":"

Obfuscation protects unintentional data loss/sharing of sensitive data. Sensitive data includes, but is not limited too:

  • -confidential business information (e.g. financial, operational, trade secrets)
  • -classified information (subject to governmental security regulations)
  • -personal identifiable information (PII)

"},"fieldName":"details.dataVizDefinition.needObfuscation","icon":"question","options":[{"description":"","label":"No, my data is ready as-is.","value":"no"},{"description":"","label":"Yes, my data will need obfuscation.","value":"yes"}],"description":"","theme":"light","title":"Will Topcoder need to obfuscate your data?","type":"radio-group","summaryTitle":"Need Obfuscation"},{"help":{"linkTitle":"Why are you asking?","title":"Why are you asking?","content":"

Data that is available for everyday consumption has typically been refreshed and processed into the appropriate form on at least a daily basis. The importance of this availability will depend on your data visualization needs—whether your objectives lean more analytical vs operational.

"},"fieldName":"details.dataVizDefinition.isDataRefreshedDaily","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Is the data refreshed daily?","type":"radio-group","summaryTitle":"Data Access"},{"fieldName":"details.dataVizDefinition.sampleData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Will you provide sample/reference data?","type":"radio-group","summaryTitle":"Sample Data"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dataVizDefinition.userRoles","icon":"question","description":"","title":"Briefly describe the roles of the intended users and how they will leverage the data to make decisions.","type":"textbox","summaryTitle":"User Roles"},{"fieldName":"details.dataVizDefinition.intendedDataUsage","icon":"question","description":"","title":"How will the intended users need to manipulate the data to effectively analyze it?","type":"textbox","summaryTitle":"Intended Usage"},{"fieldName":"details.dataVizDefinition.currentDataUsage","icon":"question","description":"","title":"Briefly describe how the intended users access this data today.","type":"textbox","summaryTitle":"Data Usage","introduction":"What do users like and dislike about how they access the data today, and what would make the experience better?"},{"fieldName":"details.dataVizDefinition.performanceIndicators","icon":"question","description":"","title":"What are the key performance indicators that should be highlighted and why are they important to you?","type":"textbox","summaryTitle":"Performance Indicators"},{"help":{"linkTitle":"What are common success indicators?","title":"What are common success indicators?","content":"

In Topcoder’s history, data visualization project success has often been based off of the following attributes:

  • How well the UX is planned, captured and conveyed visually.
  • How well the dashboard shows the data and relationships.
  • Effective data coverage.

"},"fieldName":"details.dataVizDefinition.successIndicators","icon":"question","description":"","title":"What will qualify this data visualization project as a success for you?","type":"textbox","summaryTitle":"Success Indicators"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"usageDetails","type":"questions"},{"condition":"HAS_EXISTING_DESIGNS","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Topcoder will review your request and will respond with a custom quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Visualization","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"condition":"( HAS_NEW_REPORTS_DELIVERABLE || NEED_NEW_DESIGNS )","type":"estimation","title":"Your project timeline","deliverables":[{"id":"data-viz-design","deliverableKey":"data-viz-design","title":"Design","enableCondition":"TRUTHY"},{"id":"data-viz-develop","deliverableKey":"data-viz-design","title":"Development","enableCondition":"TRUTHY"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.apiDefinition.addons.api","allowMultiple":true,"icon":"question","description":"Need more than 5 APIs developed or integrated?","theme":"light","title":"API add-ons","type":"add-ons","category":"data-viz"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"condition":"( HAS_NEW_REPORTS_DELIVERABLE || NEED_NEW_DESIGNS )","type":"estimation","title":"Your project timeline","deliverables":[{"id":"data-viz-design","deliverableKey":"data-viz-design","title":"Design","enableCondition":"TRUTHY"},{"id":"data-viz-develop","deliverableKey":"data-viz-design","title":"Development","enableCondition":"TRUTHY"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-05-31T08:40:34.000Z","updatedAt":"2020-05-05T09:59:37.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":203,"name":"Buy Capacity","key":"prepaid_budget","category":"unscoped-solutions","subCategory":null,"metadata":{},"icon":"api","question":"What type of solution you want? ","info":"Have a variety of work you are seeking to accomplish? You can purchase prepaid budget with Topcoder to use how you need.","aliases":["prepaid_budget","prepaid-budget"],"scope":{"buildingBlocks":{"FREE_SIZE_DESIGN_BUDGET":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2260","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE )"},"FREE_SIZE_DEV_BUDGET":{"maxTime":10,"metadata":{"deliverable":"development"},"price":"5822","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE )"},"FREE_SIZE_DATA_SCIENCE_BUDGET":{"maxTime":10,"metadata":{"deliverable":"data-science"},"price":"2934","minTime":10,"conditions":"( HAS_DATA_SCIENCE_DELIVERABLE )"},"FREE_SIZE_QA_BUDGET":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"9587","minTime":10,"conditions":"( HAS_QA_DELIVERABLE )"}},"preparedConditions":{"HAS_DEV_DELIVERABLE":"(details.budgetDetails.deliverables contains 'dev')","FALSY":"1 == 2","HAS_DATA_SCIENCE_DELIVERABLE":"(details.budgetDetails.deliverables contains 'data-science')","TWO_DELIVERABLES":"(details.budgetDetails.deliverables hasLength 2)","HAS_API_INTEGRATION_ADDON":"(details.budgetDetails.addons.api contains '{\"productKey\":\"additional-api-integration\"}')","HAS_DESIGN_DELIVERABLE":"(details.budgetDetails.deliverables contains 'design')","THREE_DELIVERABLES":"(details.budgetDetails.deliverables hasLength 3)","ONE_DELIVERABLE":"(details.budgetDetails.deliverables hasLength 1)","CA_NEEDED":"(details.budgetDetails.caNeeded == 'yes')","HAS_API_DEVELOPMENT_ADDON":"(details.budgetDetails.addons.api contains '{\"productKey\":\"additional-api-development\"}')","HAS_QA_DELIVERABLE":"(details.budgetDetails.deliverables contains 'qa')","FOUR_DELIVERABLES":"(details.budgetDetails.deliverables hasLength 4)","CA_NOT_NEEDED":"(details.budgetDetails.caNeeded != 'yes')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"TWO_DELIVERABLES":[["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DEV_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"]],"THREE_DELIVERABLES":[["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"],["FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"]],"ONE_DELIVERABLE":[["FREE_SIZE_DESIGN_BUDGET"],["FREE_SIZE_DEV_BUDGET"],["FREE_SIZE_QA_BUDGET"],["FREE_SIZE_DATA_SCIENCE_BUDGET"]],"FOUR_DELIVERABLES":[["FREE_SIZE_DESIGN_BUDGET","FREE_SIZE_DEV_BUDGET","FREE_SIZE_QA_BUDGET","FREE_SIZE_DATA_SCIENCE_BUDGET"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description"},"theme":"light","validations":"isRequired","type":"textbox","title":"Provide a high-level description of how you plan to use your prepaid budget, so we can set you up for success from the start.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Prepaid Budget"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.budgetDetails.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev"},{"description":"Data science budget","label":"Data Science","value":"data-science"},{"summaryLabel":"QA","description":"Standard quality assurance testing.","label":"Quality Assurance","value":"qa"}],"description":"","theme":"light","validations":"isRequired","title":"What type of budget do you need?","type":"checkbox-group","summaryTitle":"Type of budget","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"layout":{"spacing":"codes"},"hideTitle":true,"questions":[{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'design'","fieldName":"details.budgetDetails.design.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($10K x 2 = $20K budget)","title":"How much design budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"Design Units","introduction":"Price: $10K budget increments"},{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'dev'","fieldName":"details.budgetDetails.development.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($10K x 2 = $20K budget)","title":"How much development budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"Development Units","introduction":"Price: $10K budget increments"},{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'data-science'","fieldName":"details.budgetDetails.dataScience.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($10K x 2 = $20K budget)","title":"How much data science budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"Data Science Units","introduction":"Price: $10K budget increments"},{"minValue":1,"condition":"details.budgetDetails.deliverables contains 'qa'","fieldName":"details.budgetDetails.qa.qty","maxValue":100,"defaultValue":1,"icon":"question","description":"Enter total number of budget increments you need: Ex. 2 ($3.5K x 2 = $7K budget)","title":"How much QA budget capacity would you like to purchase?","type":"numberinput","summaryTitle":"QA Units","introduction":"Price: $3.5K budget increments"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Prepaid Budget","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"dev","deliverableKey":"development","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"id":"data-science","deliverableKey":"data-science","title":"Data Science","enableCondition":"HAS_DATA_SCIENCE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.apiDefinition.addons.api","allowMultiple":true,"icon":"question","description":"Need more than 5 APIs developed or integrated?","theme":"light","title":"API add-ons","type":"add-ons","category":"prepaid-budget"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"dev","deliverableKey":"development","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"id":"data-science","deliverableKey":"data-science","title":"Data Science","enableCondition":"HAS_DATA_SCIENCE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-05-30T07:07:47.000Z","updatedAt":"2020-05-05T09:59:37.559Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":38,"name":"Real World Testing","key":"real_world_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-crowd-testing","question":"What kind of quality assurance (QA) do you need?","info":"Exploratory Testing, Cross browser-device Testing","aliases":["real-world-testing","real_world_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.testType","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","title":"What kind of crowd testing are you interested in?","type":"tiled-radio-group","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"fieldName":"details.appDefinition.expectedHours","icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Do you have test cases you would like executed? These are essential when running structured testing and optional for unstructured testing. If you are planning a structured test cycle and do not have test cases do not worry, we can help!","title":"Do you have test cases written?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.userInfo","icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help us find the best testers for your application.","title":"Please tell us about your users.","type":"textbox"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Real World Testingx","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-12-07T10:12:50.000Z","updatedAt":"2020-05-05T09:59:37.560Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":101,"name":"QA Services","key":"qa_form","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"detailLink":"https://connect.topcoder-dev.com","deliverables":[{"infoHTML":"

Expected Deliverables

  • Test Case Creation: Documented test cases, including Description, Execution Steps, Expected Result, Expected Result screenshot (if access given)
  • Test Case Execution: Test case execution report for unique case runs, and a validated defect log including screenshot/video attachments. Standard delivery process performs 3 unique runs per test case.
"}]},"icon":"test","question":"test","info":"Test, identify and fix bugs in your software","aliases":["qa_form","qa-form"],"scope":{"buildingBlocks":{"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8027","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"3266","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5025","minTime":5,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"616","minTime":17,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2009","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6258","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4471","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3628","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4771","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1797","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3059","minTime":5,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"1872","minTime":12,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"1155","minTime":17,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"5802","minTime":10,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"5853","minTime":28,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"531","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"PERFORMANCE_TESTS":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4431","minTime":20,"conditions":"(PERFORMANCE_TESTING)"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"550","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"6535","minTime":28,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3199","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8308","minTime":7,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1089","minTime":5,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4972","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"4278","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"682","minTime":12,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"6132","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"6724","minTime":10,"conditions":"(REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5821","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3595","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4128","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7090","minTime":7,"conditions":"(REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"469","minTime":7,"conditions":"(AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"}},"preparedConditions":{"TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","ONE_DELIVERABLE":"true","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"hidePrice":true,"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Real World Unstructured Testing doesn't use pre-defined test scripts -- this is true “in-the-wild” testing that can provide many forms of feedback on your application, from functional issues, user experience issues, user interface issues, and content issues to name a few.

Real World Structured Testing can help produce and execute structured test cases quickly.

Mobility Testing by Topcoder can target up to 5 devices using our community of QA experts.

Automation Test Suites can be created by Topcoder using tools like Selenium, starting at up to 50 test cases.

Performance Testing by Topcoder will allow you to test several key functions of your application at scale with hundreds of virtual users. Reporting will be provided with specific recommendations to address any performance issues.

"},"fieldName":"details.appDefinition.qaType","icon":"question","options":[{"description":"Generate feedback with “in-the-wild” exploratory, functional feature testing with real users, providing feedback on compatibility, accessibility compliance, localization/language, and/or user sentiment.","label":"Unstructured Testing","value":"real-world-unstructured"},{"summaryLabel":"Structured Testing","description":"Create test cases, execute established test cases, and generate feedback with real users. Great for UAT or regression testing as part of your SDLC.","label":"Structured Testing (Test Case Creation and/or Execution)","value":"real-world-structured"},{"description":"Execute functional or non-functional testing including device compatibility certification and competitive analysis.","label":"Mobility Testing","value":"mobility-testing"},{"description":"Build reusable frameworks and test scripts using open source tools to accelerate app delivery and improve ROI","label":"Automated Testing","value":"automated-testing"},{"description":"Test responsiveness and stability of web and mobile applications under specific workloads, and identify actionable items for improvement.","label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","summaryTitle":"QA Service","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","description":"","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.structuredTestsCount","icon":"question","description":"","title":"How many test cases do you need?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens need to be tested?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.qaType == 'real-world-unstructured'","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"details.appDefinition.qaType != 'performance-testing'","hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Project Manager + Architect","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"Project Manager","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-03-12T05:55:22.000Z","updatedAt":"2020-05-05T09:59:37.559Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":213,"name":"app","key":"app","category":"test-no-id","subCategory":null,"metadata":{},"icon":"app","question":"app","info":"app","aliases":["app"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-07-04T20:12:15.000Z","updatedAt":"2020-05-05T09:59:37.623Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":244,"name":"Acceptance/Beta Testing","key":"qa_acceptance_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Execution of test cases
  • \n
  • Validated defect log in Github or Gitlab
  • \n
  • Screenshots or videos of logged defects
  • \n
\n
"}]},"icon":"beta-testing","question":"What kind of quality assurance (QA) do you need?","info":"Expand risk coverage and generate end-user feedback early in the life cycle.","aliases":["qa_acceptance_testing","qa-acceptance-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Acceptance/Beta Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need as a part of your end-user acceptance/beta testing?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true},{"fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Acceptance/Beta Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:35:13.680Z","updatedAt":"2020-05-05T09:59:37.560Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":229,"name":"test creation","key":"ds_ideation-test","category":"app_dev","subCategory":null,"metadata":{},"icon":"icon","question":"API & Integrations","info":"API & Integrations","aliases":["test_alias"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-12-21T06:50:06.751Z","updatedAt":"2020-05-05T09:59:37.560Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":230,"name":"Digital As A Service v1","key":"daas_v1","category":"scoped-solutions","subCategory":null,"metadata":{},"icon":"test","question":"What type of digital service you are looking for?","info":"digital as a service","aliases":["digital_as_a_service_v1"],"scope":{"buildingBlocks":{},"preparedConditions":{"HAS_API_MANAGEMENT_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIManagement')","DATA_ENRICHMENT_REQUIRED":"(details.daasDefinition.apiManagement.dataEnrichment == 'Yes')","HAS_B2B_DELIVERABLE":"(details.daasDefinition.deliverables contains 'b2bServices')","DATA_TRANFORMATION_REQUIRED":"(details.daasDefinition.apiManagement.dataTransformation == 'Yes')","CLOUD_MODEL_REQUIRED":"(details.daasDefinition.a2a.cloudModel == 'other')","HAS_A2A_DELIVERABLE":"(details.daasDefinition.deliverables contains 'a2aServices')","HAS_OTHER_PROTOCOL":"(details.daasDefinition.protocols == 'Other')","TRUTHY":"( 1 == 1)","CLOUD_DEPLOYMENT_PREFERENCE":"(details.daasDefinition.a2a.deploymentPref == 'other')","HAS_API_MICROSERVICE_DELIVERABLE":"(details.daasDefinition.deliverables contains 'APIAndMicroservice')","FILE_TRANSFER_REQUIRED":"(details.daasDefinition.fileTransfer == 'Yes')","FALSY":"( 1 == 2)"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Title your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.daasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"B2BServices","description":"Automation of business processes and communication/data exchange between two or more organizations.","label":"Business to Business Services","value":"b2bServices"},{"summaryLabel":"A2AServices","description":"Integration between applications.","label":"Application to Application Services","value":"a2aServices"},{"summaryLabel":"API & Microservice","description":"Enable integration and modernization of applications using gateways and microservices framework.","label":"API Implementation & Microservices","value":"APIAndMicroservice"},{"summaryLabel":"API Management","description":"The API governing process for a secure and scalable environment, using tools like APIGEE, Layer 7, IBM API Connect, etc.","label":"API Management","value":"APIManagement"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"radio-group","summaryTitle":"Solution Needed","validationError":"Please, choose what do you need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"condition":"HAS_B2B_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Understanding the number of partner organizations that will be onboarded provides context on:
- Number of organization profiles to be configured
- Number of partner profiles
- Number of security methods to be configured
- Number of defined contracts for trading partners

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.b2b.partnerOrgs","icon":"question","description":"","title":"How many partner organizations will be onboarded?","type":"textbox","summaryTitle":"Partner Orgs","required":true,"validationError":"Please, describe your partner orgnizations"},{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking partner organizations?","content":"

Knowing this highlights the number of unique interfaces that will need to be designed and developed, as well as how many will require scheduling and configuration.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.interfaces","icon":"question","description":"","title":"How many interfaces will need to be developed?","type":"textbox","summaryTitle":"Interfaces","required":true,"validationError":"Please, describe interfaces to be developed"},{"help":{"linkTitle":"Why is this important?","title":"Why is this important?","content":"

The type of protocol indicates how the business to business services will be connected and communicate.

"},"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.protocols","icon":"question","options":[{"summaryLabel":"AS2","description":"","label":"AS2","value":"AS2"},{"summaryLabel":"AS4","description":"","label":"AS4","value":"AS4"},{"summaryLabel":"Webservice","description":"","label":"Webservice","value":"Webservice"},{"summaryLabel":"SFTP","description":"","label":"SFTP","value":"SFTP"},{"summaryLabel":"Other","description":"","label":"Other","value":"Other"}],"description":"","theme":"light","title":"What type of protocol should be used?","type":"radio-group","summaryTitle":"Protocol","required":true,"validationError":"Please, select the protocol"},{"condition":"HAS_B2B_DELIVERABLE && HAS_OTHER_PROTOCOL","fieldName":"details.daasDefinition.protocolDesc","icon":"question","description":"","title":"Describe your desired protocol?","type":"textbox","summaryTitle":"Other desc","required":true,"validationError":"Please, describe other protocol"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.maps","icon":"question","description":"","title":"How many maps will need to be developed?","type":"textbox","summaryTitle":"Maps","required":true,"validationError":"Please, describe maps"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.fileTransfer","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":" Will you need managed file transfer services?","type":"radio-group","summaryTitle":"File transfer","required":true,"validationError":"Please, select one option"},{"condition":"HAS_B2B_DELIVERABLE && FILE_TRANSFER_REQUIRED","fieldName":"details.daasDefinition.fileSize","icon":"question","description":"","title":"What is the maximum size of file to transfer? ?","type":"textbox","summaryTitle":"File Size","required":true,"validationError":"Please, provide the size of file"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"b2b-solution","type":"questions"},{"condition":"HAS_A2A_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"Why are we asking?","title":"Why are we asking?","content":"

Interface or integration service enables the communication of disparate software components.

"},"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.interfaces","icon":"question","description":"","title":"How many interfaces or integration services are in scope?","type":"textbox","summaryTitle":"Interfaces/Services","required":true,"validationError":"Please, describe how many interfaces are in scope"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.mappingFields","icon":"question","description":"","title":"How many fields require mapping?","type":"textbox","summaryTitle":"mapping fields","required":true,"validationError":"Please, describe mapping fields"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.destinationEndPoints","icon":"question","description":"","title":"How many destination end points are there?","type":"textbox","summaryTitle":"Destination End Points","required":true,"validationError":"Please, provide the destination end points"},{"condition":"HAS_B2B_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataTransformMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data transformation method?","type":"radio-group","summaryTitle":"Data Transformation Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.orchestrationMethod","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do you have a data process or service orchestration method?","type":"radio-group","summaryTitle":"Orchestration Method","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data enrichment be required?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.securityScheme","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will security scheme implementation be required?","type":"radio-group","summaryTitle":"Security Scheme","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.businessRule","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will business rule implementation be required?","type":"radio-group","summaryTitle":"Business Rule","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.hybridIntegration","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Is hybrid integration required?","type":"radio-group","summaryTitle":"Hybrid Integration","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.cloudModel","icon":"question","options":[{"label":"IaaS","value":"iaas"},{"label":"PaaS","value":"paas"},{"label":"SaaS","value":"saas"},{"label":"Multi-cloud","value":"multiCloud"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What cloud model are you using in the application layer?","type":"radio-group","summaryTitle":"Cloud Model","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_MODEL_REQUIRED","fieldName":"details.daasDefinition.a2a.cloudModelDesc","icon":"question","description":"","title":"Describe your cloud model","type":"textbox","summaryTitle":"Cloud Model","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.deploymentPref","icon":"question","options":[{"label":"On-premise","value":"onPremise"},{"label":"On-cloud","value":"onCloud"},{"label":"iPaaS","value":"ipaas"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"What is your cloud deployment preference?","type":"radio-group","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, select one option"},{"condition":"HAS_A2A_DELIVERABLE && CLOUD_DEPLOYMENT_PREFERENCE","fieldName":"details.daasDefinition.a2a.cloudDeploymentDesc","icon":"question","description":"","title":"Describe your cloud deployment preference","type":"textbox","summaryTitle":"Cloud Deployment Preference","required":true,"validationError":"Please, provide the cloud model description"},{"condition":"HAS_A2A_DELIVERABLE","fieldName":"details.daasDefinition.a2a.serviceContainerization","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does your services need to be containerized?","type":"radio-group","summaryTitle":"Service Containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"a2a-solution","type":"questions"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.count","icon":"question","description":"","title":"How many APIs & microservices require development?","type":"textbox","summaryTitle":"APIs & Microservices","required":true,"validationError":"Please, describe APIs & microservices to be developed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.restOperations","icon":"question","description":"","title":"How many REST operations will be exposed?","type":"textbox","summaryTitle":"REST Operations","required":true,"validationError":"Please, describe REST operations to be exposed"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dbTables","icon":"question","description":"","title":"How many database tables will be queried?","type":"textbox","summaryTitle":"Database Tables","required":true,"validationError":"Please, describe database tables to be queried?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.modelClasses","icon":"question","description":"","title":"How many model classes need to be developed?","type":"textbox","summaryTitle":"Model Classes","required":true,"validationError":"Please, describe model classes to be developed?"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.methods","icon":"question","description":"","title":"How many methods are in the service layer?","type":"textbox","summaryTitle":"Service Layer Methods","required":true,"validationError":"Please, describe methods in the service layer"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.externalAPIs","icon":"question","description":"","title":"How many external APIs or services will be utilized?","type":"textbox","summaryTitle":"External APIs","required":true,"validationError":"Please, describe external APIs"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.requestFields","icon":"question","description":"","title":"How many fields are in the request?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.validatedFields","icon":"question","description":"","title":"How many request fields require validation?","type":"textbox","summaryTitle":"Validated Request Fields","required":true,"validationError":"Please, describe validated request fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.responseFields","icon":"question","description":"","title":"How many fields are in the response?","type":"textbox","summaryTitle":"Response Fields","required":true,"validationError":"Please, describe response fields"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.commProtocol","icon":"question","description":"","title":"What inter-service communication protocol should be used?","type":"textbox","summaryTitle":"InterService Comm Protocol","required":true,"validationError":"Please, describe inter-service communication protocol"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.dataCaching","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Will data caching be required?","type":"radio-group","summaryTitle":"Data Caching","required":true,"validationError":"Please, select one option"},{"condition":"HAS_API_MICROSERVICE_DELIVERABLE","fieldName":"details.daasDefinition.apiMicroservices.serviceContainers","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do services need to be containerized?","type":"radio-group","summaryTitle":"Service containerization","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiImplementationAndMicroservice-solution","type":"questions"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.count","icon":"question","description":"","title":"How many APIs will be exposed?","type":"textbox","summaryTitle":"APIs","required":true,"validationError":"Please, describe APIs to be exposed"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.requstFields","icon":"question","description":"","title":"How many request fields are in the APIs?","type":"textbox","summaryTitle":"Request Fields","required":true,"validationError":"Please, describe request fields"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.serviceCalls","icon":"question","description":"","title":"How many backend service calls are expected?","type":"textbox","summaryTitle":"Backend Service Calls","required":true,"validationError":"Please, describe backend service calls"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataTransformation","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data transformation?","type":"radio-group","summaryTitle":"Data Transformation","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_TRANFORMATION_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.tranformationFields","icon":"question","description":"","title":"How many fields require data transformation?","type":"textbox","summaryTitle":"Data Tranform Fields","required":true,"validationError":"Please, describe fields require for data transformation"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.dataEnrichment","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Do any fields require data enrichment?","type":"radio-group","summaryTitle":"Data Enrichment","required":true,"validationError":"Please, select one option"},{"condition":"(HAS_API_MANAGEMENT_DELIVERABLE && DATA_ENRICHMENT_REQUIRED)","fieldName":"details.daasDefinition.apiManagement.enrichmentFields","icon":"question","description":"","title":"How many fields require data enrichment?","type":"textbox","summaryTitle":"Data Enrichment Fields","required":true,"validationError":"Please, describe fields require for data enrichment"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.securityScheme","icon":"question","description":"","title":"What security scheme should be used?","type":"textbox","summaryTitle":"Security Scheme","required":true,"validationError":"Please, describe security scheme"},{"condition":"HAS_API_MANAGEMENT_DELIVERABLE","fieldName":"details.daasDefinition.apiManagement.communicationProtocol","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"}],"description":"","theme":"light","title":"Does the communication protocol require transformation?","type":"radio-group","summaryTitle":"Communication Protocol","required":true,"validationError":"Please, select one option"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"apiManagement-solution","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Digital As A Service","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"FALSY","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-01-21T03:23:35.308Z","updatedAt":"2020-05-05T09:59:37.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":205,"name":"Computer Vision","key":"computer_vision","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"detailLink":"https://www.topcoder.com/case-studies/spacenet/","deliverables":[{"infoHTML":"

Expected Deliverables

  • Top 5 performing algorithms/models, each containerized for ease of use/security
  • Analysis and documentation for winning solutions
"}]},"icon":"computer-vision","question":"Computer Vision ","info":"Locate and classify patterns, object or building dimensions and actor behavior in still and video images.","aliases":["computer_vision"," computer-vision"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"1433","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"1183","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"1669","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"2990","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"8348","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"2437","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description"},"theme":"light","validations":"isRequired","type":"textbox","title":"Describe the objectives of your Data Visualization project in 2-3 sentences.","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Computer Vision"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.compVisDefinition.background","icon":"question","description":"","theme":"light","title":"Describe the background to the problem. What context would you like us to understand?","type":"textbox","summaryTitle":"Background","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.dataVariety","icon":"question","options":[{"label":"Overhead imagery (drones, satellites, etc)","value":"overhead-imagery"},{"label":"Video (GoPro, CCD, etc)","value":"video"},{"label":"Medical Images","value":"medical-images"},{"label":"Images of text","value":"images-of-text"},{"label":"General scenery (e.g. ImageNet or wildlife data)","value":"general-scenery"},{"label":"Other or Mixed Format (please describe it)","value":"other"}],"description":"","theme":"light","title":"What sort of data do you expect to provide? Check all that apply.","type":"checkbox-group","summaryTitle":"Data Type","validationError":"Please, select what sort of data do you expect to provide?","required":true},{"condition":"(details.compVisDefinition.dataVariety contains 'other')","fieldName":"details.compVisDefinition.otherDataVariety","icon":"question","description":"","theme":"light","title":"Please describe other types of data","type":"textbox","summaryTitle":"Other Data Types"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataType","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.solutionAim","icon":"question","options":[{"label":"Shape or object recognition & tracking","value":"shape-object-recognition"},{"label":"Optical Character Recognition","value":"optical-char-recognition"},{"label":"Building footprints","value":"building-footprints"},{"label":"Continuous paths (e.g. road networks)","value":"continuous-paths"},{"label":"3D reconstruction or robotics applications","value":"3d-reconstruction-or-robotics"},{"label":"Worker safety applications","value":"workder-safety-apps"},{"label":"Security applications","value":"security-apps"},{"label":"Face detection","value":"face-detection"},{"label":"Other (please describe it)","value":"other"}],"description":"","theme":"light","title":"What is the aim of the solution? Check all that apply.","type":"checkbox-group","summaryTitle":"Data Type","validationError":"Please, select what is the aim of the solution","required":true},{"condition":"(details.compVisDefinition.solutionAim contains 'other')","fieldName":"details.compVisDefinition.otherSolutionAims","icon":"question","description":"","theme":"light","title":"Please describe other aims of your solution","type":"textbox","summaryTitle":"Other Data Types"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"solutionAim","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.dataFormat","icon":"question","description":"","title":"Describe your data and explain the data format (.tiff, png, etc or other special conditions).","type":"textbox","summaryTitle":"Data Format"},{"fieldName":"details.compVisDefinition.dataSize","icon":"question","options":[{"description":"","label":"Less than 100MB","value":"less-than-100"},{"description":"","label":"100MB - 10GB","value":"100mb-10gb"},{"description":"","label":"10GB - 50GB","value":"10gb-50gb"},{"description":"","label":"More than 50GB","value":"more-than-50gb"},{"description":"","label":"More than 1TB","value":"more-than-1tb"}],"description":"","theme":"light","title":"Approximately how large is your data set?","type":"radio-group","summaryTitle":"Data Size","introduction":"Select the best fit from the options below:"},{"fieldName":"details.compVisDefinition.imagesCount","icon":"question","description":"","title":"Approximately how many images are in your data set?","type":"textbox","summaryTitle":"Images Count"},{"fieldName":"details.compVisDefinition.dataLocation","icon":"question","description":"","title":"Where is your data located? Please provide one or more URLs, if possible.","type":"textbox","summaryTitle":"Data Location"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.hasDataRestrictions","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Is your data licensed, or subject to any patent, export or treaty restrictions, or are there other roadblocks of which we should be aware?","type":"radio-group","summaryTitle":"Patent/Licenses"},{"condition":"(details.compVisDefinition.hasDataRestrictions == 'yes')","fieldName":"details.compVisDefinition.licenseRestrictions","icon":"question","description":"","theme":"light","title":"Please describe what are restrictions.","type":"textbox","summaryTitle":"Restrictions"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"licenseRestrictions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.expectedOutcomes","icon":"question","options":[{"description":"I want first-pass, proof-of-concept style results, which leverage insightfully-modified, open source packages that can be delivered in 2-4 weeks. I will review submissions and pick a winner.","label":"POC Style Results","value":"poc"},{"description":"I need best-in-class, research-grade outcomes. I am willing to accept a longer lead-time of 5-6 weeks, wherein real-time competition and objective scoring on a public leaderboard delivers maximum performance results.","label":"Research Grade Results","value":"research-grade"}],"description":"","theme":"light","title":"Which scenario best matches your needs and expected outcomes?","type":"radio-group","summaryTitle":"Expected Outcomes"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"outcomeDataDetails","type":"questions"},{"hideTitle":true,"questions":[{"condition":"( details.compVisDefinition.expectedOutcomes == 'research-grade')","fieldName":"details.compVisDefinition.scoringSystems","icon":"question","options":[{"label":"Dice Coefficient","value":"dice-coefficient"},{"label":"Jaccard Index/Intersection Over Union","value":"jaccard-index-over-union"},{"label":"Classification Accuracy","value":"classification-accuracy"},{"label":"ROC/AUC","value":"roc-auc"},{"label":"F1 Score","value":"f1-score"},{"label":"Mean Squared Error","value":"mean-squared-error"},{"label":"Other (please describe it)","value":"other"}],"description":"","theme":"light","title":"Topcoder can support many types of scoring systems, simultaneously.","type":"checkbox-group","summaryTitle":"Scoring Systems","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the scoring system you need","required":true},{"condition":"(details.compVisDefinition.scoringSystems contains 'other')","fieldName":"details.compVisDefinition.otherScoringSystems","icon":"question","description":"","theme":"light","title":"Please describe the other scoring systems","type":"textbox","summaryTitle":"Other Platforms"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"scoringSystems","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.isDataLabeled","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Is any percent of your data labeled?","type":"radio-group","summaryTitle":"Is Data Labled"},{"condition":"(details.compVisDefinition.isDataLabeled == 'yes')","fieldName":"details.compVisDefinition.labeledPercent","icon":"question","description":"","theme":"light","title":"Please indicate the percent of labeled images.","type":"textbox","summaryTitle":"Labeled Percent"},{"condition":"(details.compVisDefinition.isDataLabeled == 'no')","fieldName":"details.compVisDefinition.isDataLabelingRequired","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Would you like Topcoder to help label your data?","type":"radio-group","summaryTitle":"Labeling Required"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataLabeling","type":"questions"},{"condition":"details.compVisDefinition.isDataLabelingRequired == 'no'","fieldName":"details.compVisDefinition.message","hideTitle":true,"description":"Topcoder challenges are scored algorithmically. In order to support your challenge, we will need to know how to measure good vs poor solutions. A Topcoder Challenge Architect will work with you to define scoring.","id":"customeQuote","title":"Message","type":"message"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.productionPrepRequired","icon":"question","options":[{"description":"","label":"Yes, I will need results fitted with a GUI, deployed as an API, etc. ","value":"yes"},{"description":"","label":"No, I will work with the command line results.","value":"no"}],"description":"","theme":"light","title":"Solutions are delivered as command line programs. Will you need your output to be further prepared for production use?","type":"radio-group","summaryTitle":"Need Production Prep"},{"condition":"(details.compVisDefinition.productionPrepRequired == 'yes')","fieldName":"details.compVisDefinition.productionRequirements","icon":"question","description":"","theme":"light","title":"Describe how you will interact with and deploy your results.","type":"textbox","summaryTitle":"Production Req"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"requirements","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.compVisDefinition.notes","icon":"question","description":"","theme":"light","title":"Please provide any additional notes/context you believe is important for us to know.","type":"textbox","summaryTitle":"Additional Context"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"condition":"details.compVisDefinition.productionPrepRequired == 'yes'","fieldName":"details.compVisDefinition.message","hideTitle":true,"description":"Topcoder will review your request and will respond with a custom quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Computer Vision","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-06-07T09:38:29.000Z","updatedAt":"2020-05-05T09:59:37.624Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":242,"name":"Exploratory Testing","key":"qa_exploratory_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"exploratory-testing","question":"What kind of quality assurance (QA) do you need?","info":"Validate functionality and usability of web and mobile apps in-the-wild with real-life users.","aliases":["qa_exploratory_testing","qa-exploratory-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Exploratory Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will exploratory testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Exploratory Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:25:58.815Z","updatedAt":"2020-05-05T09:59:37.624Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":16,"name":"Performance Testing","key":"performance_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-website-performance","question":"What kind of quality assurance (QA) do you need?","info":"Webpage rendering effiency, Load, Stress and Endurance Test","aliases":["performance-testing","performance_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"In 160 or more characters tell us what is the app, main functions, problem area, etc..","id":"projectInfo","validations":"isRequired,minLength:160","title":"Please provide brief description of the system and/or application you would like to execute Performance Testing on.","type":"textbox"},{"fieldName":"details.loadDetails.concurrentUsersCount","icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","title":"What is the desired load on the system in terms of concurrent users for this test??","type":"slide-radiogroup","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","title":"Approximately how many business processes/transactions will be included in your Performance Test?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","title":"How many hours do you expect the Performance Test to be executed for?","type":"slide-radiogroup","required":true,"validationError":"Please provide expected hours of execution"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements, architecture details, tools, performance baseline, etc. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project. If you have any supporting documents, please add the links in the “Notes” section. You can upload any additional files (specifications, diagrams, mock interfaces, etc.) once your project is created.","id":"appDefinition","title":"Performance Testing","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-06T08:22:15.000Z","updatedAt":"2020-05-05T09:59:37.625Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":243,"name":"Compatibility Testing","key":"qa_compatibility_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform/ Devices/ Browsers
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos of logged defects
  • \n
\n
"}]},"icon":"compatibility-testing","question":"What kind of quality assurance (QA) do you need?","info":"Cross-browser, device testing including network, geographical coverage to assure app launch success.","aliases":["qa_compatibility_testing","qa-compatibility-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Compatibility Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will compatibility testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Compatibility Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:30:51.172Z","updatedAt":"2020-05-05T09:59:37.625Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":231,"name":"Subtitle 2","key":"subtitle2","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ? 1","info":"Build apps for mobile, web, or wearables 123","aliases":["subtitle2"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"345","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7334","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"560","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8754","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"9670","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"2523","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"8603","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"3019","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"4269","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2649","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"1356","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3276","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"117","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2519","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6082","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7500","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"5216","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4147","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"5936","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9691","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"2278","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"7972","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"3768","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1529","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7651","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5873","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"5120","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"6306","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"4886","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8627","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4121","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3914","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"9794","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"9805","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"2462","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"4359","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"5137","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"2721","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"7571","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"319","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"833","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7282","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"515","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8149","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3330","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"3941","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"1134","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"6488","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"1284","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1745","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"7547","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"1182","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9933","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4449","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"8700","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2497","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2307","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8639","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2185","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2290","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1510","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"7754","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"6783","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"7161","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"793","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5175","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1457","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"3335","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"808","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"9319","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8425","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4771","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2126","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3753","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1181","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6223","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7234","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9412","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9999","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3648","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1162","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"1631","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5904","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"2573","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2648","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2610","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"6552","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"9773","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"8007","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"6550","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5806","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"9198","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7359","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7119","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1182","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"418","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3247","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"4375","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8977","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"2111","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"7742","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"714","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1176","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"7915","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9627","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"6274","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"4228","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6445","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4491","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"586","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"9765","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"7594","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4586","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"674","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5540","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"6593","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"8477","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"6136","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7327","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4911","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"6024","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"4969","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2202","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"5797","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"6022","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"7978","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"8912","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"8112","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1018","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"1642","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5465","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"2630","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"5944","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"8980","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3521","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8360","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7193","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"2433","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2183","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6217","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":[{"isFrequent":true,"description":"Java 2 Enterprise Edition","categories":["design","dev-qa","qa"],"title":"J2EE","value":1},{"isFrequent":false,"description":"Java programming language","categories":["dev-qa"],"title":"Java","value":2},{"isFrequent":false,"description":"JavaBean","categories":["qa","deployment"],"title":"JavaBean","value":3},{"isFrequent":true,"description":"Enterprise Java Beans","categories":["deployment"],"title":"EJB","value":4},{"isFrequent":false,"description":"Java ServerPages","categories":["design","dev-qa","qa"],"title":"JSP","value":5},{"isFrequent":false,"description":"Java Servlet technology","categories":["dev-qa"],"title":"Servlet","value":6},{"isFrequent":true,"description":"Java Applets","categories":["qa","deployment"],"title":"Applet","value":7},{"isFrequent":false,"description":"Java Applications","categories":["deployment"],"title":"Java Application","value":8},{"isFrequent":false,"description":"Java Messaging Service","categories":["design","dev-qa","qa"],"title":"JMS","value":9},{"isFrequent":true,"description":"Web Services","categories":["dev-qa"],"title":"Web Services","value":10},{"isFrequent":false,"description":"Microsoft .NET Framework","categories":["qa","deployment"],"title":".NET","value":11},{"isFrequent":false,"description":"Microsoft Visual Basic programming language","categories":["deployment"],"title":"VB","value":12},{"isFrequent":true,"description":"C++ programming language","categories":["design","dev-qa","qa"],"title":"C++","value":13},{"isFrequent":false,"description":"Microsoft Component Object Model","categories":["dev-qa"],"title":"COM","value":14},{"isFrequent":false,"description":"Extensible Markup Language","categories":["qa","deployment"],"title":"XML","value":15},{"isFrequent":true,"description":"XML Style Sheets","categories":["deployment"],"title":"XSL","value":16},{"isFrequent":false,"description":"Hyper Text Markup Language","categories":["design","dev-qa","qa"],"title":"HTML","value":4202325},{"isFrequent":false,"description":"Hyper Text Transfer Protocol","categories":["dev-qa"],"title":"HTTP","value":4202326},{"isFrequent":true,"description":"Microsoft C# programming language","categories":["qa","deployment"],"title":"C#","value":5905414},{"isFrequent":false,"description":"Visual Basic .NET Programming Language","categories":["deployment"],"title":"VB.NET","value":7375010},{"isFrequent":false,"description":"JavaServer Faces","categories":["design","dev-qa","qa"],"title":"JSF","value":14999206},{"isFrequent":true,"description":"Java Mobile","categories":["dev-qa"],"title":"J2ME","value":15035679},{"isFrequent":false,"description":"MIDP 2.0","categories":["qa","deployment"],"title":"MIDP 2.0","value":15035680},{"isFrequent":false,"description":"XUL","categories":["deployment"],"title":"XUL","value":22839202},{"isFrequent":true,"description":"JavaScript","categories":["design","dev-qa","qa"],"title":"JavaScript","value":22839204},{"isFrequent":false,"description":"Microsoft IIS","categories":["dev-qa"],"title":"IIS","value":26740931},{"isFrequent":false,"description":"Oracle 10g","categories":["qa","deployment"],"title":"Oracle 10g","value":26740932},{"isFrequent":true,"description":"Oracle 9i","categories":["deployment"],"title":"Oracle 9i","value":26740933},{"isFrequent":false,"description":"SQL Server","categories":["design","dev-qa","qa"],"title":"SQL Server","value":26753737},{"isFrequent":false,"description":"COM+","categories":["dev-qa"],"title":"COM+","value":26783183},{"isFrequent":true,"description":"Windows Workflow Foundation","categories":["qa","deployment"],"title":"Windows Workflow Foundation","value":26854281},{"isFrequent":false,"description":"Windows Communication Foundation","categories":["deployment"],"title":"Windows Communication Foundation","value":26854283},{"isFrequent":false,"description":"XAML","categories":["design","dev-qa","qa"],"title":"XAML","value":26930935},{"isFrequent":true,"description":"Microsoft SilverLight","categories":["dev-qa"],"title":"Microsoft SilverLight","value":26930938},{"isFrequent":false,"description":"Spring","categories":["qa","deployment"],"title":"Spring","value":26951706},{"isFrequent":false,"description":"Dojo","categories":["deployment"],"title":"Dojo","value":26951708},{"isFrequent":true,"description":"AJAX","categories":["design","dev-qa","qa"],"title":"AJAX","value":26951709},{"isFrequent":false,"description":"Struts","categories":["dev-qa"],"title":"Struts","value":27004060},{"isFrequent":false,"description":"CSS","categories":["qa","deployment"],"title":"CSS","value":27004061},{"isFrequent":true,"description":"Windows Presentation Foundation","categories":["deployment"],"title":"WPF","value":27048250}],"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true,"skillsCategoriesField":"details.appDefinition.deliverables"},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-01-21T03:54:54.954Z","updatedAt":"2020-05-05T09:59:37.623Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":233,"name":"Regression Testing","key":"qa_regression","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

\n
  • Test case creation (if requested)
  • \n
  • Execution of test cases
  • \n
  • Validated defect log in Github or Gitlab
  • \n
  • Screenshots or videos of logged defects
  • \n
\n
"}]},"icon":"regression-testing","question":"What kind of quality assurance (QA) do you need?","info":"Validate business-critical workflows with structured testing.","aliases":["qa-regression","qa_regression"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Regression Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true},{"fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Regression Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-13T05:14:47.711Z","updatedAt":"2020-05-05T09:59:37.625Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":117,"name":"Subtitle","key":"subtitle","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ? 1","info":"Build apps for mobile, web, or wearables 123","aliases":["subtitle"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5568","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2682","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"1853","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5189","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"3653","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"7104","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"4150","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"6220","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"2802","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8097","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"5574","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5790","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"3760","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"934","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9268","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2299","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1047","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8617","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"2369","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"9124","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9430","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"6596","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"689","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"7450","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3188","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3220","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"702","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"1484","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"7942","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7428","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"690","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9941","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"2091","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"6216","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"3657","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"1154","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8345","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"9613","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"6089","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8376","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1988","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4631","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6156","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"7411","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7276","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"10021","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"6346","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"9844","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"9255","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9321","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"7805","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2656","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6772","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3006","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"8777","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2399","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2727","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4298","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5915","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3888","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6582","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"332","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"9825","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"309","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5527","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4331","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8294","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"3907","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"4388","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"792","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6589","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8891","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7194","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8575","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8123","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"2434","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8631","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1340","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9530","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"764","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1907","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2304","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"6871","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"9627","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"793","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9307","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"2786","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"7431","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"335","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7502","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2881","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"3022","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5065","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2615","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"1348","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9538","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"4076","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7694","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9657","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"8435","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"5240","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"6242","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1957","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"8146","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"5594","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"7590","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"8509","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9942","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"605","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9419","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"6475","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"3512","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2773","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1291","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7122","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"2132","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"3327","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"110","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"3605","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6783","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"811","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"1994","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"534","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"7153","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"3450","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3050","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5341","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"6244","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9988","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"3130","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2755","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"9454","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"5718","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"6161","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4679","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3276","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"608","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"6709","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6429","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"1008","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":[{"isFrequent":true,"description":"Java 2 Enterprise Edition","categories":["design","dev-qa","qa"],"title":"J2EE","value":1},{"isFrequent":false,"description":"Java programming language","categories":["dev-qa"],"title":"Java","value":2},{"isFrequent":false,"description":"JavaBean","categories":["qa","deployment"],"title":"JavaBean","value":3},{"isFrequent":true,"description":"Enterprise Java Beans","categories":["deployment"],"title":"EJB","value":4},{"isFrequent":false,"description":"Java ServerPages","categories":["design","dev-qa","qa"],"title":"JSP","value":5},{"isFrequent":false,"description":"Java Servlet technology","categories":["dev-qa"],"title":"Servlet","value":6},{"isFrequent":true,"description":"Java Applets","categories":["qa","deployment"],"title":"Applet","value":7},{"isFrequent":false,"description":"Java Applications","categories":["deployment"],"title":"Java Application","value":8},{"isFrequent":false,"description":"Java Messaging Service","categories":["design","dev-qa","qa"],"title":"JMS","value":9},{"isFrequent":true,"description":"Web Services","categories":["dev-qa"],"title":"Web Services","value":10},{"isFrequent":false,"description":"Microsoft .NET Framework","categories":["qa","deployment"],"title":".NET","value":11},{"isFrequent":false,"description":"Microsoft Visual Basic programming language","categories":["deployment"],"title":"VB","value":12},{"isFrequent":true,"description":"C++ programming language","categories":["design","dev-qa","qa"],"title":"C++","value":13},{"isFrequent":false,"description":"Microsoft Component Object Model","categories":["dev-qa"],"title":"COM","value":14},{"isFrequent":false,"description":"Extensible Markup Language","categories":["qa","deployment"],"title":"XML","value":15},{"isFrequent":true,"description":"XML Style Sheets","categories":["deployment"],"title":"XSL","value":16},{"isFrequent":false,"description":"Hyper Text Markup Language","categories":["design","dev-qa","qa"],"title":"HTML","value":4202325},{"isFrequent":false,"description":"Hyper Text Transfer Protocol","categories":["dev-qa"],"title":"HTTP","value":4202326},{"isFrequent":true,"description":"Microsoft C# programming language","categories":["qa","deployment"],"title":"C#","value":5905414},{"isFrequent":false,"description":"Visual Basic .NET Programming Language","categories":["deployment"],"title":"VB.NET","value":7375010},{"isFrequent":false,"description":"JavaServer Faces","categories":["design","dev-qa","qa"],"title":"JSF","value":14999206},{"isFrequent":true,"description":"Java Mobile","categories":["dev-qa"],"title":"J2ME","value":15035679},{"isFrequent":false,"description":"MIDP 2.0","categories":["qa","deployment"],"title":"MIDP 2.0","value":15035680},{"isFrequent":false,"description":"XUL","categories":["deployment"],"title":"XUL","value":22839202},{"isFrequent":true,"description":"JavaScript","categories":["design","dev-qa","qa"],"title":"JavaScript","value":22839204},{"isFrequent":false,"description":"Microsoft IIS","categories":["dev-qa"],"title":"IIS","value":26740931},{"isFrequent":false,"description":"Oracle 10g","categories":["qa","deployment"],"title":"Oracle 10g","value":26740932},{"isFrequent":true,"description":"Oracle 9i","categories":["deployment"],"title":"Oracle 9i","value":26740933},{"isFrequent":false,"description":"SQL Server","categories":["design","dev-qa","qa"],"title":"SQL Server","value":26753737},{"isFrequent":false,"description":"COM+","categories":["dev-qa"],"title":"COM+","value":26783183},{"isFrequent":true,"description":"Windows Workflow Foundation","categories":["qa","deployment"],"title":"Windows Workflow Foundation","value":26854281},{"isFrequent":false,"description":"Windows Communication Foundation","categories":["deployment"],"title":"Windows Communication Foundation","value":26854283},{"isFrequent":false,"description":"XAML","categories":["design","dev-qa","qa"],"title":"XAML","value":26930935},{"isFrequent":true,"description":"Microsoft SilverLight","categories":["dev-qa"],"title":"Microsoft SilverLight","value":26930938},{"isFrequent":false,"description":"Spring","categories":["qa","deployment"],"title":"Spring","value":26951706},{"isFrequent":false,"description":"Dojo","categories":["deployment"],"title":"Dojo","value":26951708},{"isFrequent":true,"description":"AJAX","categories":["design","dev-qa","qa"],"title":"AJAX","value":26951709},{"isFrequent":false,"description":"Struts","categories":["dev-qa"],"title":"Struts","value":27004060},{"isFrequent":false,"description":"CSS","categories":["qa","deployment"],"title":"CSS","value":27004061},{"isFrequent":true,"description":"Windows Presentation Foundation","categories":["deployment"],"title":"WPF","value":27048250}],"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true,"skillsCategoriesField":"details.appDefinition.deliverables"},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-05-11T05:15:55.000Z","updatedAt":"2020-05-05T09:59:37.624Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":210,"name":"Data Science Sprint","key":"ds_sprint","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

Demonstration of solution through:
  • Output data sets (machine learning)
  • Algorithmic code scores (optimization, prediction)
  • White papers from the Top 5 submissions to understand the techniques used to develop these results.
"}]},"icon":"data-science-sprint","question":"DS Sprints","info":"Quickly get answers, test assumptions, and iterate on existing code to improve data science outcomes.","aliases":["ds_sprint"," ds-sprint"],"scope":{"buildingBlocks":{"RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"3457","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"6611","minTime":30,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"3327","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_LABELED && PROD_PREP_NOT_REQUIRED )"},"RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":45,"metadata":{"deliverable":"comp-viz-research-grade"},"price":"7211","minTime":45,"conditions":"( EXPECTED_OUTCOME_RESEARCH_GRADE && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":30,"metadata":{"deliverable":"comp-viz-poc"},"price":"7971","minTime":30,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_REQUIERD && PROD_PREP_NOT_REQUIRED )"},"POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN":{"maxTime":15,"metadata":{"deliverable":"comp-viz-poc"},"price":"3242","minTime":15,"conditions":"( EXPECTED_OUTCOME_POC && DATA_NOT_LABELED && LABELING_NOT_REQUIERD && PROD_PREP_NOT_REQUIRED )"}},"preparedConditions":{"EXPECTED_OUTCOME_POC":"(details.compVisDefinition.expectedOutcomes == 'poc')","LABELING_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'yes')","HAS_POC_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'poc')","HAS_RESEARCH_GRADE_DELIVERABLE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","EXPECTED_OUTCOME_RESEARCH_GRADE":"(details.compVisDefinition.expectedOutcomes == 'research-grade')","ONE_DELIVERABLE":"( 1 == 1)","LABELING_NOT_REQUIERD":"(details.compVisDefinition.isDataLabelingRequired == 'no')","TRUTHY":"( 1 == 1)","DATA_NOT_LABELED":"(details.compVisDefinition.isDataLabeled == 'no')","PROD_PREP_NOT_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'no')","DATA_LABELED":"(details.compVisDefinition.isDataLabeled == 'yes')","PROD_PREP_REQUIRED":"(details.compVisDefinition.productionPrepRequired == 'yes')"},"addonPriceConfig":{"ONE_DELIVERABLE":[]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE":[["POC_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["POC_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_PROD_PREP_COMP_VIZ_DESIGN"],["RESEARCH_GRADE_NOT_LABELED_NO_LABELING_NO_PROD_PREP_COMP_VIZ_DESIGN"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go!","id":"project-basic-details","title":"Data Science Sprint"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.dsSprint.problemStatement","icon":"question","description":"","title":"Describe the problem you would like to solve or the concept you would like to explore.","type":"textbox","summaryTitle":"Problem Concept","required":true,"validationError":"Please, provide problem statement/concept for your project"},{"fieldName":"details.dsSprint.goals","icon":"question","description":"","title":"Expanding on your answer above, what are the one or two most important goals this project should achieve?","type":"textbox","summaryTitle":"Project Goals","required":true,"validationError":"Please, provide goals for your project"},{"fieldName":"details.dsSprint.problemDesc","icon":"question","description":"","title":"Provide a descriptive background of the problem.","type":"textbox","summaryTitle":"Problem Description","required":true,"validationError":"Please, provide descriptive background for your project"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"background","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.academicPapers","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Are there academic papers or other sources that should be considered as inputs for your project?","type":"radio-group","summaryTitle":"Academic Papers"},{"condition":"(details.dsSprint.academicPapers == 'yes')","fieldName":"details.dsSprint.urls","icon":"question","description":"","theme":"light","title":"Please list URLs to academic papers or other sources. ","type":"textbox","summaryTitle":"Academic URLs","required":true,"validationError":"Please, provide URLs to your academic papers"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"academicPapers","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.preferredTech","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have a preferred technologies that should be used for development?","type":"radio-group","summaryTitle":"Do you have Preferred Technology"},{"condition":"( details.dsSprint.preferredTech == 'yes')","fieldName":"details.dsSprint.preferredTechnologies","icon":"question","options":[{"label":"Python","value":"python"},{"label":"R and derivatives","value":"rDerivatives"},{"label":"Jupyter Notebook","value":"jupyter"},{"label":"Java","value":"java"},{"label":"C++","value":"cpp"},{"label":"Other","value":"other"}],"description":"","theme":"light","title":"Indicate your preferred technologies","type":"checkbox-group","summaryTitle":"Preferred Technology","introduction":"Select your preferred scoring system(s):","validationError":"Please, select the preffered technologies","required":true},{"condition":"details.dsSprint.preferredTechnologies contains 'other'","fieldName":"details.dsSprint.techPlatforms","icon":"question","description":"","title":"Describe which technologies or platforms you’d like to use","type":"textbox","summaryTitle":"Other Technologies","validationError":"Please, provide technologies or platforms you’d like to use"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"preferredTechnology","type":"questions"},{"hideTitle":true,"questions":[{"condition":"!(details.dsSprint.preferredTechnologies hasLength 0)","fieldName":"details.dsSprint.selectedTechRequired","icon":"question","options":[{"description":"","label":"Required","value":"required"},{"description":"","label":"Optional","value":"optional"}],"description":"","theme":"light","title":"Are the selected technologies required, or optional?","type":"radio-group","summaryTitle":"Technologies Required/Optional ?"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"selectedTechRequired","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.openSourceLibraries","icon":"question","options":[{"description":"","label":"Open source is acceptable","value":"openSourceAcceptable"},{"description":"","label":"Open source is acceptable in general but I want to approve specific libraries","value":"openSourceSpecificLibraries"},{"description":"","label":"Open source is not acceptable","value":"openSourceUnacceptable"}],"description":"","theme":"light","title":"By default, Topcoder will employ open source libraries when the use of them improves outcome or speed.","type":"radio-group","summaryTitle":"Open Source","introduction":"Please indicate your preference for open source libraries."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"openSourceLibraries","type":"questions"},{"hideTitle":true,"questions":[{"minLabel":"See Many Concepts","fieldName":"details.dsSprint.outcome","max":100,"icon":"question","description":"","title":"What outcome is more important?","type":"slider-standard","summaryTitle":"Outcome","maxLabel":"See Best Implementations","required":true,"validationError":"Please provide expected hours of execution","min":1,"theme":"light","step":1,"introduction":"Topcoder’s deliverables can be adjusted to produce many concepts exploring possible solutions to a problem, or to produce focused proofs of concept based on a given technology stack or problem statement. Drag the tab below towards the most appropriate answer."}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"outcome","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.dataAvailable","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Do you have data that you can provide?","type":"radio-group","summaryTitle":"Data Available"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataFormat","icon":"question","description":"","title":"Describe the data’s format, size, and the steps you’ll need to take to share it.","type":"textbox","summaryTitle":"Data format & other details"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.pIIData","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data contain PII?","type":"radio-group","summaryTitle":"PII Data"},{"condition":"(details.dsSprint.dataAvailable == 'yes')","fieldName":"details.dsSprint.dataModifications","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","title":"Does your data need to be further obfuscated or privatized","type":"radio-group","summaryTitle":"Data Obfuscated/Privatized"},{"condition":"(details.dsSprint.dataModifications == 'yes')","fieldName":"details.dsSprint.dataModificationsDesc","icon":"question","description":"","theme":"light","title":"Briefly describe the additional obfuscation/privatization required.","type":"textbox","summaryTitle":"Obfuscation/Privatization Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"dataDetails","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.dsSprint.criteria","icon":"question","description":"Consider how you will differentiate between first and second place solutions","title":"Describe the criteria you would like to use for deciding winning options.","type":"textbox","summaryTitle":"Winning Criteria","required":true,"validationError":"Please, describe the criteria for deciding winning options"},{"fieldName":"details.dsSprint.notes","icon":"question","description":"","title":"Notes: Anything else you’d like to describe?","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"criteriaAndNotes","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Data Science Sprint","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"PROD_PREP_NOT_REQUIRED","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"comp-viz-design","deliverableKey":"comp-viz-poc","title":"Poc","enableCondition":"HAS_POC_DELIVERABLE"},{"id":"comp-viz-research-grade","deliverableKey":"comp-viz-research-grade","title":"Research Grade","enableCondition":"HAS_RESEARCH_GRADE_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-06-20T12:06:09.000Z","updatedAt":"2020-05-05T09:59:37.625Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":241,"name":"Accessibility Testing","key":"qa_accessibilty_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of accessibility compliance issues and UX feedback/ recommendations:

\n
  • Severity
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"accessibility-compliance","question":"What kind of quality assurance (QA) do you need?","info":"WCAG 2.1 standards-based usability testing to validate end-user experience and ensure digital accessibility.","aliases":["qa_accessibilty_testing","qa-accessibilty-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Accessibilty Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will accessibilty testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Accessibilty Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:22:05.951Z","updatedAt":"2020-05-05T09:59:37.681Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":239,"name":"Functional Feature Testing","key":"qa_functional_feature_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"functional-feature-testing","question":"What kind of quality assurance (QA) do you need?","info":"Testing features in an agile environment to speed-up test case design and execution activities.","aliases":["qa_functional_feature_testing","qa-functional-feature-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Functional Feature Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will functional feature testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Functional Feature Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:07:45.239Z","updatedAt":"2020-05-05T09:59:37.681Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":234,"name":"Mobile App Certification","key":"qa_mobile_app_certification","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"mobile-app-certification","question":"What kind of quality assurance (QA) do you need?","info":"Execute functional and non-functional tests including device compatibility certification and UX study.","aliases":["qa_mobile_app_certification","qa-mobile-app-certification"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Mobile App Certification"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing for mobile usability.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Include any additional information.","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Mobile App Certification","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-13T15:26:42.509Z","updatedAt":"2020-05-05T09:59:37.681Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":207,"name":"test","key":"subtitle-skills-api","category":"app","subCategory":null,"metadata":{},"icon":"product-analytics-computer-vision","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["subtitle-skills-api","subtitle_skills_api"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5028","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8860","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"7893","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7939","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"8803","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"814","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"8409","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"6862","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"2920","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3822","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2760","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7387","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"7681","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5329","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5403","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"8686","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9091","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9484","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"9500","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"6950","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"3940","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"2966","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"7444","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5488","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9220","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7940","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3229","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"8911","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"1531","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"5805","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"452","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8194","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"8764","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"8988","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"8603","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"10069","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"2283","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"221","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"7105","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9712","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9491","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4950","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8784","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8128","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2894","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1138","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"9629","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"5809","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"7594","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2580","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"3040","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8226","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6817","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7514","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"3790","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4863","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5381","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9866","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5543","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2859","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5942","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3470","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"6334","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"4028","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4611","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9697","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6420","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"7686","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"6352","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1249","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"7815","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4122","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7223","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4644","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4798","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"8044","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7254","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4755","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"6310","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8035","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"5874","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"8606","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9986","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"3592","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7096","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7835","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"6027","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"9297","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"7411","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"802","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"979","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"5737","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3371","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"9922","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8422","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1106","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"298","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"5845","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8414","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"6137","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"197","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"1763","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2536","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"6846","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"2199","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"6885","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"6977","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7743","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1653","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"278","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"4718","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"433","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"4352","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2763","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"3581","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"8438","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"4123","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"9729","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"4789","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6993","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7212","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"9402","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1039","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"7754","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"737","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"7287","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4183","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"4405","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9649","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"7449","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"6838","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"8785","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1902","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"1542","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2465","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3109","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9406","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"6947","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3759","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"1299","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":{"categoriesMapping":{"dev-qa":"DEVELOP","design":"DESIGN"},"frequent":[1,4,7,10,13,16,5905414,15035679,22839204,26740933,26854281,26930938,26951709,27048250],"categoriesField":"details.appDefinition.deliverables"},"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"I need best-in-class, research-grade outcomes. I am willing to accept a longer lead-time of 5-6 weeks, wherein real-time competition and objective scoring on a public leaderboard delivers maximum performance results.","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-06-12T08:31:50.000Z","updatedAt":"2020-05-05T09:59:37.558Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":102,"name":"Form example","key":"form-example","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables","aliases":["form-example","form_example"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4782","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"10079","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"881","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4043","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"6093","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"5774","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"8182","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"922","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"8299","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3552","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3340","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5108","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"7656","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8166","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4848","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4234","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7456","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7639","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"5633","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"6956","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"9556","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"9169","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"963","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3825","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2351","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6042","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6279","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"5516","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"7743","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"527","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2822","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8586","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1855","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"404","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"4533","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"922","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"5598","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"6235","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"1911","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9006","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"827","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9743","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"5406","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"5374","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4875","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"8274","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"9032","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"5121","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"8284","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"2087","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"8767","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"141","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3608","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"4000","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"736","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5734","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"8116","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5431","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5128","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"10044","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5414","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"776","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"8027","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"6631","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2546","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"773","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9975","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"6528","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"4297","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"7966","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8352","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9881","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8563","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"202","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7157","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3228","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"4393","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4584","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3912","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9756","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"1606","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"7397","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5010","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"7312","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4521","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"557","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"9508","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"4461","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"1116","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"2189","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3031","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"2532","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9833","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6790","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9032","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"501","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"4279","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"3412","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4653","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"7957","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"3264","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"8431","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"4121","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"4089","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"4425","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"8875","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"7346","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8338","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"3901","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"6031","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"3471","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"4503","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9665","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5572","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"383","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"7842","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"2753","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"4260","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1784","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"1676","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"9593","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6578","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"554","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"2007","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"7840","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"540","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"2138","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"2854","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3156","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"122","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"4775","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"4764","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"3332","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"2256","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8448","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3201","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2218","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"9379","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3113","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"1226","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"(details.appDefinition.deliverables contains 'dev-qa')","summaryLabel":"QA","autoSelectCondition":"(details.appDefinition.deliverables contains 'dev-qa')","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'design')","options":[{"disableCondition":"details.appDefinition.deliverables contains 'dev-qa'","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"(details.appDefinition.deliverables contains 'dev-qa')","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.designGoal == 'concept-designs' )","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( (details.appDefinition.deliverables contains 'design') || (details.appDefinition.deliverables contains 'dev-qa') ) && (!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive'))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"(details.appDefinition.quickTurnaround != 'under-3-days')","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"(details.appDefinition.deliverables hasLength 1) && (details.appDefinition.deliverables contains 'qa')","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.deliverables contains 'qa' && details.appDefinition.deliverables hasLength 1 )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'real-world-structured'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation' && details.appDefinition.structuredTestWorkType hasLength 1)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'real-world-unstructured'","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'automated-testing'","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"details.appDefinition.deliverables contains 'deployment'","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.deliverables contains 'deployment'","options":[{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( (details.appDefinition.deliverables hasLength 1) || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( !( details.appDefinition.targetDevices hasLength 1 ) && details.appDefinition.progressiveResponsive == 'responsive')","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"( (!( details.appDefinition.targetDevices hasLength 1 )) && details.appDefinition.progressiveResponsive == 'responsive')","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'design')","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'dev-qa')","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'qa')","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"(details.appDefinition.deliverables contains 'deployment')","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"(details.appDefinition.deliverables contains 'design')"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"(details.appDefinition.deliverables contains 'dev-qa')"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"(details.appDefinition.deliverables contains 'qa')"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"(details.appDefinition.deliverables contains 'deployment')"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-03-18T07:25:30.000Z","updatedAt":"2020-05-05T09:59:37.556Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":13,"name":"Mobility Testing","key":"mobility_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{},"icon":"product-qa-mobility-testing","question":"What kind of quality assurance (QA) do you need?","info":"App Certification, Lab on Hire, User Sentiment Analysis","aliases":["mobility-testing","mobility_testing"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.mobilityTestingType","icon":"question","options":[{"title":"Select","value":""},{"title":"Banking or Financial Services","value":"finserv"},{"title":"eCommerce","value":"ecommerce"},{"title":"Media / Entertainment","value":"entertainment"},{"title":"Gaming","value":"gaming"},{"title":"Health and Fitness","value":"health"},{"title":"Manufacturing","value":"manufacturing"},{"title":"Retail","value":"retail"},{"title":"Travel / Transportation","value":"travel"},{"title":"Other","value":"other"}],"description":"Please let us know the type of application to test. If you are unsure, please select \"Other\"","title":"What kind of application would you like to test?","type":"select-dropdown","required":true,"validationError":"Please let us know what kind of application you would like to test."},{"fieldName":"details.appDefinition.testCases","icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Please let us know if you have any test cases written. If not, they can be created as part of your test cycle.","title":"Do you have test cases written?","type":"radio-group","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","icon":"question","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","validations":"isRequired,minLength:160","id":"projectInfo","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.userInfo","icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help us find the best testers for your application.","title":"Please tell us about your users.","type":"textbox"},{"fieldName":"details.appDefinition.primaryTarget","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Which is your primary device target?","type":"tiled-radio-group"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Mobility Testing","required":true}]},"phases":{"1-qa-iteration-i":{"duration":24,"name":"QA Phase","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2018-07-06T07:31:13.000Z","updatedAt":"2020-05-05T09:59:37.559Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":221,"name":"Design, Development & Deployment","key":"app_new_intake","category":"scoped-solutions","subCategory":"applications-and-websites","metadata":{"deliverables":[{"subTextHTML":"","infoHTML":"

Design

  • A fully polished frontend user interface design delivered in your choice of Photoshop, Illustrator, Sketch, or XD
  • Interactive design demo links using industry leading tools
"},{"subTextHTML":"","infoHTML":"

Development

  • Microservices Architecture
  • API Specs
  • Frontend Development
  • Backend Development
  • Database Development
  • Crash/Error Logging
  • Security Scan
  • Unit Tests
  • Test Cases
  • Quality Assurance Testing
  • Defect Remediation
  • User Acceptance Testing
  • UAT Enhancements
"},{"subTextHTML":"","infoHTML":"

Deployment

  • Configuration of leading CI/CD tools with your code base.
  • Assistance launching applications in the Apple and Google Play stores.
  • Code base deployment to internal production environments
"}]},"icon":"applications-websites","question":"test","info":"Design, build, test and deploy beautiful web mobile applications, mobile apps, backend services, integrations, and more. Choose where you need support and get going on creating something amazing!","aliases":["app_new_intake"],"scope":{"buildingBlocks":{"ADMIN_TOOL_DEV_ADDON":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"5977","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON )"},"GOOGLE_ANALYTICS_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9999","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON )"},"API_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4989","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON )"},"SSO_INTEGRATION_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"9669","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON )"},"RESP_APP_SOLUTION":{"maxTime":55,"metadata":{"deliverable":"dev-qa"},"price":"169","minTime":55,"conditions":"( HAS_DEV_DELIVERABLE && RESP_APP_SOLUTION )"},"OFFLINE_CAPABILITY_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3819","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON )"},"DESIGN_DIRECTION_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"3600","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON )"},"DESIGN_BLOCK":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4368","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE )"},"LOCATION_SERVICES_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"2283","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON )"},"RUX_BLOCK":{"maxTime":8,"metadata":{"deliverable":"design"},"price":"326","minTime":8,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN )"},"SVC_BLOCK":{"maxTime":0,"metadata":{"deliverable":"dev-qa"},"price":"6999","minTime":0,"conditions":"( HAS_DEV_DELIVERABLE )"},"ZEPLIN_APP_ADDON":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7071","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON )"},"INTERNAL_DEPLOY_SOLUTION":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"9717","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT)"},"MAZE_UX_TESTING_ADDON":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"5637","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON )"},"RESP_UI_PROTOTYPE_ADDON":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"1561","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON )"},"WEB_APP_SOLUTION":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"6807","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && WEB_APP_SOLUTION )"},"DESIGN_SOLUTION":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1785","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN)"},"CI_CD_ADDON":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"9813","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON )"},"BLACKDUCK_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5804","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON )"},"QA_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"6796","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MOBILE_ENT_SECURITY_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"10090","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON )"},"UNIT_TESTING_ADDON":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"3826","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON )"},"CONTAINERIZED_CODE_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9604","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON )"},"SMTP_SERVER_SETUP_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5714","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON )"},"RESP_DESIGN_IMPL_ADDON":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"4628","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON )"},"CHECKMARX_SCANNING_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"9229","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON )"},"AUTOMATION_TESTING_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3301","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON )"},"TWO_OS_MOBILE_DESKTOP_SOLUTION":{"maxTime":55,"metadata":{"deliverable":"dev-qa"},"price":"5590","minTime":55,"conditions":"( HAS_DEV_DELIVERABLE && MOBILE_DEVICES && ( ONLY_TWO_OS_MOBILE_DESKTOP ) )"},"DESIGN_BLOCK_FOR_DEV":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7795","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"UI_PROTOTYPE_ADDON":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5273","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON )"},"SOCIAL_MEDIA_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5611","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON )"},"MOBILE_DEPLOY_SOLUTION":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"2263","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_MOBILE_DEPLOYMENT)"},"THIRD_PARTY_INTEGRATION_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"4870","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON )"},"TWO_OS_MOBILTY_SOLUTION":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"4040","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && MOBILE_DEVICES && ( ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_PROGRESSIVE ) )"},"PERF_TESTING_ADDON":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"8225","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON )"},"UAT_ENHANCEMENTS_ADDON":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"4993","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON )"},"WIREFRAMES_ADDON":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"5327","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON )"},"API_INTEGRATION_ADDON":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2528","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON )"},"ONE_OS_MOBILTY_SOLUTION":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"2316","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ((MOBILE_DEVICES && ONLY_ONE_OS_MOBILE && !(WEB_DEVICE)) || (WEB_DEVICE && ONLY_ONE_OS_PROGRESSIVE)) )"},"DEV_BLOCK":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8088","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE )"},"MIN_BATTERY_USE_IMPL_ADDON":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"10014","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON )"},"BACKEND_DEVELOPMENT_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1752","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON )"},"SMS_GATEWAY_INTEGRATION_ADDON":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6206","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON )"},"DESIGN_RUX_SOLUTION":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"2820","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN )"}},"preparedConditions":{"HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","MOBILITY_SOLUTION":"!(details.appDefinition.mobilePlatforms hasLength 0)","ONLY_ONE_OS_PROGRESSIVE":"( details.appDefinition.targetDevices hasLength 1 && details.appDefinition.targetDevices contains 'web-browser' && details.appDefinition.webBrowserBehaviour == 'progressive' )","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","MOBILE_DEVICES":"(details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","WEB_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'desktop')","WEB_DEVICE":"(details.appDefinition.targetDevices contains 'web-browser')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","CUSTOM_QUOTE":"((details.appDefinition.webBrowserBehaviour == 'responsive' || details.appDefinition.designGoal == 'concept-designs') && !(details.appDefinition.targetDevices hasLength 0 || details.appDefinition.targetDevices hasLength 1)) || details.appDefinition.needAdditionalScreens == 'yes'","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","NEED_ADDITIONAL_SCREENS":"(details.appDefinition.needAdditionalScreens == 'yes')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","RESP_APP_SOLUTION":"(details.appDefinition.webBrowserBehaviour == 'responsive')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.webBrowserBehaviour == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","ONLY_ONE_OS_MOBILE":"( details.appDefinition.mobilePlatforms hasLength 1 || details.appDefinition.nativeHybrid == 'hybrid' )","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","ONLY_TWO_OS_BOTH_MOBILES":"(details.appDefinition.mobilePlatforms hasLength 2 && details.appDefinition.nativeHybrid != 'hybrid')","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","IS_WEB_RESP_APP":"(details.appDefinition.webBrowserBehaviour == 'responsive')","CONCEPT_DESIGN":"( details.appDefinition.designGoal == 'concept-designs' )","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","FALSY":"1 == 2","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.webBrowserBehaviour == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"scopeChangeFields":["details.appDefinition.deliverables","details.appDefinition.designGoal","details.appDefinition.quickTurnaround","details.appDefinition.targetDevices","details.appDefinition.mobilePlatforms","details.appDefinition.nativeHybrid","details.appDefinition.webBrowserBehaviour","details.appDefinition.numberScreens","details.appDefinition.deploymentTargets","details.appDefinition.caNeeded"],"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["CI_CD_ADDON"]],"HAS_DESIGN_DELIVERABLE":[["WIREFRAMES_ADDON"],["UI_PROTOTYPE_ADDON"],["RESP_UI_PROTOTYPE_ADDON"],["ZEPLIN_APP_ADDON"],["DESIGN_DIRECTION_ADDON"],["MAZE_UX_TESTING_ADDON"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON"],["API_INTEGRATION_ADDON"],["OFFLINE_CAPABILITY_ADDON"],["MIN_BATTERY_USE_IMPL_ADDON"],["SMTP_SERVER_SETUP_ADDON"],["BACKEND_DEVELOPMENT_ADDON"],["RESP_DESIGN_IMPL_ADDON"],["ADMIN_TOOL_DEV_ADDON"],["LOCATION_SERVICES_ADDON"],["CONTAINERIZED_CODE_ADDON"],["GOOGLE_ANALYTICS_ADDON"],["SSO_INTEGRATION_ADDON"],["THIRD_PARTY_INTEGRATION_ADDON"],["SMS_GATEWAY_INTEGRATION_ADDON"],["SOCIAL_MEDIA_INTEGRATION_ADDON"],["MOBILE_ENT_SECURITY_ADDON"],["CHECKMARX_SCANNING_ADDON"],["BLACKDUCK_SCANNING_ADDON"],["AUTOMATION_TESTING_ADDON"],["PERF_TESTING_ADDON"],["UNIT_TESTING_ADDON"],["UAT_ENHANCEMENTS_ADDON"]]},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"(!(CUSTOM_QUOTE) && HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE)":[["WEB_APP_SOLUTION"],["RESP_APP_SOLUTION"],["ONE_OS_MOBILTY_SOLUTION"],["TWO_OS_MOBILTY_SOLUTION"]],"(!(CUSTOM_QUOTE) && HAS_DESIGN_DELIVERABLE && ONE_TARGET_DEVICE)":[["DESIGN_SOLUTION"],["DESIGN_RUX_SOLUTION"]],"(!(CUSTOM_QUOTE) && HAS_DESIGN_DELIVERABLE && TWO_TARGET_DEVICES)":[["DESIGN_SOLUTION","DESIGN_SOLUTION"]],"FALSY && MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_TWO_OS_BOTH_MOBILES":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(FALSY && HAS_DESIGN_DELIVERABLE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK"],["RUX_BLOCK"]],"(!(CUSTOM_QUOTE) && HAS_DEPLOY_DELIVERABLE )":[["MOBILE_DEPLOY_SOLUTION"],["INTERNAL_DEPLOY_SOLUTION"]],"(FALSY && HAS_DESIGN_DELIVERABLE && TWO_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK"]],"(FALSY && WEB_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(FALSY && HAS_DESIGN_DELIVERABLE && THREE_TARGET_DEVICES)":[["DESIGN_BLOCK","DESIGN_BLOCK","DESIGN_BLOCK"]],"FALSY && MOBILITY_SOLUTION && MOBILE_DEVICES && ONLY_ONE_OS_MOBILE":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(!(CUSTOM_QUOTE) && HAS_DEV_DELIVERABLE && THREE_TARGET_DEVICES)":[["TWO_OS_MOBILE_DESKTOP_SOLUTION"]],"(FALSY && RESP_APP_SOLUTION && WEB_DEVICE && ONE_TARGET_DEVICE)":[["DESIGN_BLOCK_FOR_DEV","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","DEV_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","QA_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK","SVC_BLOCK"]],"(!(CUSTOM_QUOTE) && HAS_DESIGN_DELIVERABLE && THREE_TARGET_DEVICES)":[["DESIGN_SOLUTION","DESIGN_SOLUTION","DESIGN_SOLUTION"]],"(!(CUSTOM_QUOTE) && HAS_DEV_DELIVERABLE && TWO_TARGET_DEVICES)":[["ONE_OS_MOBILTY_SOLUTION"],["TWO_OS_MOBILTY_SOLUTION"],["TWO_OS_MOBILE_DESKTOP_SOLUTION"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"},{"fieldName":"description","theme":"light","type":"textbox","title":"Briefly describe your goals.","validationError":"Please, describe your goals","required":true}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"Designers will produce up to 8 high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"condition":"CONCEPT_DESIGN","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 8 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 8 screens?","required":true},{"condition":"COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.needAdditionalScreens","icon":"question","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will your application require more than 15 screens?","type":"radio-group","summaryTitle":"Need Add'l Screens","validationError":"Please let us know if you need more than 15 screens?","required":true},{"condition":"(CONCEPT_DESIGN && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"8-16","description":"","label":"8-16 screens","value":"8-16"},{"summaryLabel":"16-24","description":"","label":"16-24 screens","value":"16-24"},{"summaryLabel":"24-32","description":"","label":"24-32 screens","value":"24-32"},{"summaryLabel":"32-40","description":"","label":"32-40 screens","value":"32-40"},{"summaryLabel":"40+","description":"","label":"40+ screens","value":"40+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true},{"condition":"((COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && details.appDefinition.needAdditionalScreens == 'yes')","fieldName":"details.appDefinition.screensCount","icon":"question","options":[{"summaryLabel":"15-30","description":"","label":"15-30 screens","value":"15-30"},{"summaryLabel":"30-45","description":"","label":"30-45 screens","value":"30-45"},{"summaryLabel":"45-60","description":"","label":"45-60 screens","value":"45-60"},{"summaryLabel":"60+","description":"","label":"60+ screens","value":"60+"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens do you anticipate requiring?","type":"radio-group","summaryTitle":"Screens Count","validationError":"Please, choose expected number of screens.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Topcoder’s standard concept design solution provides concept designs for one device. If you require concept designs for more than one device, please select all device types required and we will send you a custom proposal.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"CONCEPT_DESIGN","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"condition":"( ( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN ) || HAS_DEV_DELIVERABLE)","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.mobilePlatforms","icon":"question","description":"","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms","required":true,"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (CONCEPT_DESIGN ) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","affectsQuickQuote":true,"options":[{"description":"Your designs will be tailored to iOS mobile devices.","label":"iOS","value":"ios"},{"description":"Your designs will be tailored to Android mobile devices.","label":"Android","value":"android"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.mobilePlatforms","icon":"question","description":"","title":"What mobile platform is required?","type":"checkbox-group","summaryTitle":"Mobile platforms","required":true,"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( (COMPREHENSIVE_DESIGN || HAS_DEV_DELIVERABLE) && ( details.appDefinition.targetDevices contains 'mobile' || details.appDefinition.targetDevices contains 'tablet' ))","affectsQuickQuote":true,"options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Should your app use a native or hybrid framework?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( HAS_DEV_DELIVERABLE && ( details.appDefinition.mobilePlatforms contains 'ios' || details.appDefinition.mobilePlatforms contains 'android' ))","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.webBrowserBehaviour","icon":"question","description":"","title":"How should your app work in web browsers?","type":"radio-group","summaryTitle":"Web browser behaviour","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Responsive Web Applications can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Progressive Web Applications are built using a native framework. Benefits of a PWA include app installation, reliable launching despite network conditions, and more engaging content.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your responsive web app can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"I want a web app that is responsive to all device types, including desktop.","value":"responsive"},{"description":"Your progressive web app can be installed on a desktop device, ensuring faster and more reliable launching.","label":"I want a web app that is installable on desktops.","value":"progressive"},{"description":"Your desktop app can be accessed from desktop devices on all common web browsers.","label":"I want a web app that is designed specifically for desktop use.","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"condition":"HAS_DESIGN_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.hasBrandGuidelines","icon":"question","description":"","title":"Do you have required style/brand guidelines?","type":"radio-group","summaryTitle":"Brand Guidelines","validationError":"Please let us know if you have style/brand guildlines?","required":true,"help":{"linkTitle":"Where to Share Style & Branding Guidelines","title":"Where to Share Style & Branding Guidelines","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your style guide or branding guidelines inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificFonts","icon":"question","description":"","title":"Are there particular fonts you want used?","type":"radio-group","summaryTitle":"Specific Fonts","validationError":"Please let us know if you need particular fonts?","required":true,"help":{"linkTitle":"Where to Share Font Preferences","title":"Where to Share Font Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your font preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.needSpecificColors","icon":"question","description":"","title":"Are there particular colors/themes you want used?","type":"radio-group","summaryTitle":"Specific Colors","validationError":"Please let us know if you need particular colors/theme?","required":true,"help":{"linkTitle":"Where to Share Color/Theme Preferences","title":"Where to Share Color/Theme Preferences","content":"

Once you complete this intake form, a project will be created inside Topcoder’s Connect platform. Please share any files or links indicating your color/theme preferences inside the project.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"description":"","label":"Yes","value":"yes"},{"description":"","label":"No","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"design-deliverable-questions","type":"questions"},{"condition":"HAS_DEV_DELIVERABLE","hideTitle":false,"questions":[{"fieldName":"details.techstack.hasLanguagesPref","label":"Programming Languages","title":"","type":"checkbox","summaryTitle":"Languages Pref"},{"condition":"details.techstack.hasLanguagesPref == true","fieldName":"details.techstack.languages","title":"Let us know what programming languages you prefer.","type":"textbox","summaryTitle":"Languages"},{"fieldName":"details.techstack.hasFrameworksPref","label":"Frameworks","title":"","type":"checkbox","summaryTitle":"Frameworks Pref"},{"condition":"details.techstack.hasFrameworksPref == true","fieldName":"details.techstack.frameworks","title":"Let us know what frameworks you prefer.","type":"textbox","summaryTitle":"Frameworks"},{"fieldName":"details.techstack.hasDatabasePref","label":"Database","title":"","type":"checkbox","summaryTitle":"Database Pref"},{"condition":"details.techstack.hasDatabasePref == true","fieldName":"details.techstack.database","title":"Let us know what database you prefer.","type":"textbox","summaryTitle":"Database Pref"},{"fieldName":"details.techstack.hasServerPref","label":"Server","title":"","type":"checkbox","summaryTitle":"Database"},{"condition":"details.techstack.hasServerPref == true","fieldName":"details.techstack.server","title":"Let us know what server you prefer.","type":"textbox","summaryTitle":"Server"},{"fieldName":"details.techstack.hasHostingPref","label":"Hosting Environment","title":"","type":"checkbox","summaryTitle":"Hosting Pref"},{"condition":"details.techstack.hasHostingPref == true","fieldName":"details.techstack.hosting","title":"Let us know what hosting you prefer.","type":"textbox","summaryTitle":"Hosting Environments"},{"fieldName":"details.techstack.noPref","label":"No Preferences","title":"","type":"checkbox","summaryTitle":"No Preference"},{"fieldName":"details.techstack.sourceControl","title":"How do you manage source control?","type":"textbox","summaryTitle":"Source Control"}],"description":"","wizard":{"previousStepVisibility":"readOptimized"},"id":"dev-deliverable-questions","title":"Do you have technology stack preferences?","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"condition":"FALSY && !(CUSTOM_QUOTE)","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"!id","fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"},{"condition":"(CUSTOM_QUOTE)","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Topcoder will contact you shortly with a proposal on your project.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"condition":"!(CUSTOM_QUOTE)","hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(CUSTOM_QUOTE)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2},{"sectionIndex":4}]},{"hideTitle":true,"questions":[],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-09-13T13:31:28.000Z","updatedAt":"2020-05-05T09:59:37.624Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":237,"name":"QA Max","key":"qa_max","category":"quality_assurance","subCategory":"quality_assurance","metadata":{},"icon":"qa_maxd","question":"qa_max","info":"qa_max","aliases":["qa_max"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Regression Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true},{"fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"fieldName":"description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Regression Testing","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-02-14T04:11:48.276Z","updatedAt":"2020-05-05T09:59:37.681Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":4,"name":"Chatbot","key":"generic_chatbot","category":"scoped-solutions","subCategory":"analytics-and-data-science","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

  • Interactive chatbot responding to voice, text and Alexa input
  • Configured for plain and contextual (nested) responses
  • One data source integration
"}]},"icon":"chatbot","question":"What do you need to develop?","info":"Voice, Text and Alexa capable chatbot deployed on an AWS stack.","aliases":["chatbot","generic_chatbot"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.capabilities","icon":"question","options":[{"label":"Order management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","title":"What capabilities does the chatbot need to support?","type":"checkbox-group","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.integrationSystems","icon":"question","description":"","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below.","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.existingAgentScripts","icon":"question","description":"","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later).","type":"textbox","required":true,"validationError":"Please complete this section"},{"fieldName":"details.appDefinition.transferToHumanAgents","icon":"question","description":"","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.).","type":"textbox","required":true,"validationError":"Please complete this section"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Chatbot","required":true}]},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"Chatbot Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-06-13T07:37:57.000Z","updatedAt":"2020-05-05T09:59:37.626Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":232,"name":"Subtitle 3","key":"subtitle3","category":"app","subCategory":null,"metadata":{},"icon":"product-app-app","question":"What do you need to develop ?","info":"Build apps for mobile, web, or wearables tttt","aliases":["subtitle3"],"scope":{"buildingBlocks":{"HAS_SMTP_SERVER_SETUP_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8636","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"1804","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"3439","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9152","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MAZE_UX_TESTING_ADDON_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"1981","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"2755","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DEPLOY_INTERNAL_NO_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"1717","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_DEV_ONE_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1925","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"144","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3688","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3096","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"6451","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"687","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7066","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3655","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NEEDED)"},"LARGE_DEV_TWO_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"7928","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8154","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"HAS_LOCATION_SERVICES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4244","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_LOCATION_SERVICES_ADDON && CA_NOT_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"3264","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3114","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"7541","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_NO_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"5967","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":23,"metadata":{"deliverable":"design"},"price":"4062","minTime":23,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_UI_PROTOTYPE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"5082","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3591","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SOCIAL_MEDIA_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_CHECKMARX_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4702","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CHECKMARX_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"9837","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"772","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NEEDED )"},"MAZE_UX_TESTING_ADDON_NO_CA":{"maxTime":1,"metadata":{"deliverable":"design"},"price":"8429","minTime":1,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_MAZE_UX_TESTING_ADDON && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"3923","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"8807","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4827","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"3343","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"1043","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"3193","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"API_INTEGRATION_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"1576","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"7127","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NEEDED)"},"DEPLOY_MOBILE_NO_CA":{"maxTime":10,"metadata":{"deliverable":"deployment"},"price":"4155","minTime":10,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"SMALL_WIREFRAMES_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"9652","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"6162","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7396","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"8433","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"404","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3619","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"HAS_SMTP_SERVER_SETUP_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"4770","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMTP_SERVER_SETUP_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"7376","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_NO_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"9991","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NOT_NEEDED )"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"3291","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"302","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_DEV_ONE_OS_RESP_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4662","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"DEPLOY_MOBILE_INTERNAL_CA":{"maxTime":13,"metadata":{"deliverable":"deployment"},"price":"7422","minTime":13,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_INTERNAL_DEPLOYMENT && HAS_MOBILE_DEPLOYMENT && CA_NEEDED )"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8697","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"MEDIUM_DEV_TWO_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3205","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"934","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"6495","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NEEDED)"},"LARGE_DEV_ONE_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"5478","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"1469","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"API_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1584","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_ONE_OS_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"6774","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1299","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"9786","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NEEDED )"},"MEDIUM_DEV_ONE_OS_NO_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3684","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"5672","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NEEDED )"},"HAS_RESP_DESIGN_IMPL_ADDON_CA":{"maxTime":3,"metadata":{"deliverable":"dev-qa"},"price":"4716","minTime":3,"conditions":"( HAS_DEV_DELIVERABLE && HAS_RESP_DESIGN_IMPL_ADDON && CA_NEEDED)"},"HAS_GOOGLE_ANALYTICS_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"7446","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_GOOGLE_ANALYTICS_ADDON && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"1801","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"1075","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NEEDED)"},"MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"design"},"price":"8361","minTime":20,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"4245","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_DEV_ONE_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"4169","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"193","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2158","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"API_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"3881","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_API_DEVELOPMENT_ADDON && CA_NEEDED)"},"HAS_BLACKDUCK_SCANNING_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"241","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BLACKDUCK_SCANNING_ADDON && CA_NOT_NEEDED)"},"HAS_SSO_INTEGRATION_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"6692","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SSO_INTEGRATION_ADDON && CA_NEEDED)"},"SMALL_DEV_ONE_OS_RESP_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3302","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_SMALL && CA_NEEDED )"},"DESIGN_DIRECTION_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"9757","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NOT_NEEDED)"},"LARGE_DEV_TWO_OS_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"9324","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8959","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"8044","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":22,"metadata":{"deliverable":"design"},"price":"4380","minTime":22,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"MEDIUM_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"1947","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"LARGE_COMP_DESIGN_ONE_DEVICE_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"4664","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_LARGE && CA_NEEDED )"},"SMALL_WIREFRAMES_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"design"},"price":"2654","minTime":7,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"OFFLINE_CAPABILITY_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"2439","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NEEDED)"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"724","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"8303","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":17,"metadata":{"deliverable":"qa"},"price":"5423","minTime":17,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"8811","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"1758","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NEEDED )"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"9580","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":28,"metadata":{"deliverable":"qa"},"price":"4518","minTime":28,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"7891","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8540","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_WIREFRAMES_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"design"},"price":"5433","minTime":12,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8033","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"5797","minTime":10,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"SMALL_RESP_UI_PROTOTYPE_ADDON_CA":{"maxTime":16,"metadata":{"deliverable":"design"},"price":"2513","minTime":16,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_RESP_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NEEDED)"},"HAS_CONTAINERIZED_CODE_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"5003","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_CONTAINERIZED_CODE_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"7926","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_DEV_TWO_OS_NO_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"6915","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"DEPLOY_INTERNAL_CA":{"maxTime":3,"metadata":{"deliverable":"deployment"},"price":"4699","minTime":3,"conditions":"( HAS_DEPLOY_DELIVERABLE && ONLY_INTERNAL_DEPLOYMENT && CA_NEEDED )"},"OFFLINE_CAPABILITY_ADDON_NO_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"3717","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_OFFLINE_CAPABILITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_NO_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"5807","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NOT_NEEDED )"},"ZEPLIN_APP_ADDON_NO_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"7620","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"1621","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NEEDED)"},"FREE_SIZE_CONC_DESIGN_ASAP_CA":{"maxTime":3,"metadata":{"deliverable":"design"},"price":"7246","minTime":3,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_3_DAYS && CA_NEEDED )"},"HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"254","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NOT_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"7463","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"DESIGN_DIRECTION_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"3522","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_DESIGN_DIRECTION_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"9509","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_DEV_TWO_OS_CA":{"maxTime":35,"metadata":{"deliverable":"dev-qa"},"price":"1705","minTime":35,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_TWO_OS_BOTH_MOBILES || ONLY_TWO_OS_MOBILE_DESKTOP || ONLY_TWO_OS_MOBILE_PROGRESSIVE) && SCREENS_COUNT_SMALL && CA_NEEDED )"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2148","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_UNSTRUCT_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"4882","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"ZEPLIN_APP_ADDON_CA":{"maxTime":2,"metadata":{"deliverable":"design"},"price":"8675","minTime":2,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_ZEPLIN_APP_ADDON && CA_NEEDED)"},"HAS_ADMIN_TOOL_DEV_ADDON_NO_CA":{"maxTime":28,"metadata":{"deliverable":"dev-qa"},"price":"5950","minTime":28,"conditions":"( HAS_DEV_DELIVERABLE && HAS_ADMIN_TOOL_DEV_ADDON && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":19,"metadata":{"deliverable":"design"},"price":"4599","minTime":19,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"10061","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_THIRD_PARTY_INTEGRATION_ADDON && CA_NOT_NEEDED)"},"MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"3409","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"MEDIUM_DEV_ONE_OS_RESP_NO_CA":{"maxTime":45,"metadata":{"deliverable":"dev-qa"},"price":"4899","minTime":45,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED )"},"LARGE_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"5141","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_CI_CD_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"8383","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"8058","minTime":5,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA":{"maxTime":14,"metadata":{"deliverable":"design"},"price":"6976","minTime":14,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && TWO_TARGET_DEVICES && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"PERFORMANCE_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"8365","minTime":20,"conditions":"( HAS_QA_DELIVERABLE && PERFORMANCE_TESTING && CA_NEEDED)"},"MEDIUM_DEV_ONE_OS_CA":{"maxTime":40,"metadata":{"deliverable":"dev-qa"},"price":"3055","minTime":40,"conditions":"( HAS_DEV_DELIVERABLE && (ONLY_ONE_OS_MOBILE || ONLY_ONE_OS_DESKTOP || ONLY_ONE_OS_PROGRESSIVE) && SCREENS_COUNT_MEDIUM && CA_NEEDED)"},"MEDIUM_WIREFRAMES_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"9476","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_WIREFRAMES_ADDON && SCREENS_COUNT_MEDIUM && CA_NOT_NEEDED)"},"LARGE_UI_PROTOTYPE_ADDON_CA":{"maxTime":13,"metadata":{"deliverable":"design"},"price":"3270","minTime":13,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_LARGE && CA_NEEDED)"},"HAS_BACKEND_DEVELOPMENT_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"837","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_BACKEND_DEVELOPMENT_ADDON && CA_NEEDED)"},"SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA":{"maxTime":9,"metadata":{"deliverable":"design"},"price":"2481","minTime":9,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && ONE_TARGET_DEVICE && SCREENS_COUNT_SMALL && CA_NOT_NEEDED )"},"SMALL_UI_PROTOTYPE_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"design"},"price":"3817","minTime":10,"conditions":"( HAS_DESIGN_DELIVERABLE && HAS_UI_PROTOTYPE_ADDON && SCREENS_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"6184","minTime":12,"conditions":"( HAS_QA_DELIVERABLE && AUTOMATED_TESTING && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA":{"maxTime":25,"metadata":{"deliverable":"design"},"price":"537","minTime":25,"conditions":"( HAS_DESIGN_DELIVERABLE && COMPREHENSIVE_DESIGN && THREE_TARGET_DEVICES && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_DEV_ONE_OS_RESP_NO_CA":{"maxTime":50,"metadata":{"deliverable":"dev-qa"},"price":"5116","minTime":50,"conditions":"( HAS_DEV_DELIVERABLE && ONE_TARGET_DEVICE && ONLY_ONE_OS_RESPONSIVE && SCREENS_COUNT_LARGE && CA_NOT_NEEDED )"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"1269","minTime":7,"conditions":"( HAS_QA_DELIVERABLE && REAL_WORLD_STRUCT_TESTING && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"8446","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_SMS_GATEWAY_INTEGRATION_ADDON && CA_NEEDED)"},"HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA":{"maxTime":10,"metadata":{"deliverable":"dev-qa"},"price":"249","minTime":10,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MOBILE_ENT_SECURITY_ADDON && CA_NOT_NEEDED)"},"FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA":{"maxTime":6,"metadata":{"deliverable":"design"},"price":"9141","minTime":6,"conditions":"( HAS_DESIGN_DELIVERABLE && CONCEPT_DESIGN && QUICK_DESIGN_6_DAYS && CA_NOT_NEEDED )"},"HAS_MIN_BATTERY_USE_IMPL_ADDON_CA":{"maxTime":5,"metadata":{"deliverable":"dev-qa"},"price":"471","minTime":5,"conditions":"( HAS_DEV_DELIVERABLE && HAS_MIN_BATTERY_USE_IMPL_ADDON && CA_NEEDED)"},"HAS_CI_CD_ADDON_NO_CA":{"maxTime":20,"metadata":{"deliverable":"deployment"},"price":"6718","minTime":20,"conditions":"( HAS_DEPLOY_DELIVERABLE && HAS_CI_CD_ADDON && CA_NOT_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'desktop') && (details.appDefinition.targetDevices hasLength 1))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'desktop') && (!(details.appDefinition.targetDevices contains 'web-browser')))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (!(details.appDefinition.targetDevices contains 'desktop')) && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"addonPriceConfig":{"HAS_DEPLOY_DELIVERABLE":[["HAS_CI_CD_ADDON_NO_CA"],["HAS_CI_CD_ADDON_CA"]],"HAS_DESIGN_DELIVERABLE":[["SMALL_WIREFRAMES_ADDON_NO_CA"],["MEDIUM_WIREFRAMES_ADDON_NO_CA"],["LARGE_WIREFRAMES_ADDON_NO_CA"],["SMALL_WIREFRAMES_ADDON_CA"],["MEDIUM_WIREFRAMES_ADDON_CA"],["LARGE_WIREFRAMES_ADDON_CA"],["SMALL_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_UI_PROTOTYPE_ADDON_CA"],["LARGE_UI_PROTOTYPE_ADDON_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_NO_CA"],["SMALL_RESP_UI_PROTOTYPE_ADDON_CA"],["MEDIUM_RESP_UI_PROTOTYPE_ADDON_CA"],["LARGE_RESP_UI_PROTOTYPE_ADDON_CA"],["ZEPLIN_APP_ADDON_NO_CA"],["ZEPLIN_APP_ADDON_CA"],["DESIGN_DIRECTION_ADDON_NO_CA"],["DESIGN_DIRECTION_ADDON_CA"],["MAZE_UX_TESTING_ADDON_NO_CA"],["MAZE_UX_TESTING_ADDON_CA"]],"HAS_DEV_DELIVERABLE":[["API_DEVELOPMENT_ADDON_NO_CA"],["API_DEVELOPMENT_ADDON_CA"],["API_INTEGRATION_ADDON_NO_CA"],["API_INTEGRATION_ADDON_CA"],["OFFLINE_CAPABILITY_ADDON_NO_CA"],["OFFLINE_CAPABILITY_ADDON_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_NO_CA"],["HAS_MIN_BATTERY_USE_IMPL_ADDON_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_NO_CA"],["HAS_SMTP_SERVER_SETUP_ADDON_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_NO_CA"],["HAS_BACKEND_DEVELOPMENT_ADDON_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_NO_CA"],["HAS_RESP_DESIGN_IMPL_ADDON_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_NO_CA"],["HAS_ADMIN_TOOL_DEV_ADDON_CA"],["HAS_LOCATION_SERVICES_ADDON_NO_CA"],["HAS_LOCATION_SERVICES_ADDON_CA"],["HAS_CONTAINERIZED_CODE_ADDON_NO_CA"],["HAS_CONTAINERIZED_CODE_ADDON_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_NO_CA"],["HAS_GOOGLE_ANALYTICS_ADDON_CA"],["HAS_SSO_INTEGRATION_ADDON_NO_CA"],["HAS_SSO_INTEGRATION_ADDON_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_NO_CA"],["HAS_THIRD_PARTY_INTEGRATION_ADDON_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_NO_CA"],["HAS_SMS_GATEWAY_INTEGRATION_ADDON_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_NO_CA"],["HAS_SOCIAL_MEDIA_INTEGRATION_ADDON_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_NO_CA"],["HAS_MOBILE_ENT_SECURITY_ADDON_CA"],["HAS_CHECKMARX_SCANNING_ADDON_NO_CA"],["HAS_CHECKMARX_SCANNING_ADDON_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_NO_CA"],["HAS_BLACKDUCK_SCANNING_ADDON_CA"],["SMALL_AUTOMATION_TESTING_ADDON_NO_CA"],["SMALL_AUTOMATION_TESTING_ADDON_CA"],["LARGE_AUTOMATION_TESTING_ADDON_NO_CA"],["LARGE_AUTOMATION_TESTING_ADDON_CA"],["PERF_TESTING_ADDON_CA"],["HAS_UNIT_TESTING_ADDON_NO_CA"],["HAS_UNIT_TESTING_ADDON_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_NO_CA"],["HAS_UAT_ENHANCEMENTS_ADDON_CA"]]},"priceConfig-old":null,"basePriceEstimate":1000,"priceConfig":{"TWO_DELIVERABLES && HAS_QA_DELIVERABLE":[["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"]],"ONE_DELIVERABLE && (!(HAS_QA_DELIVERABLE))":[["FREE_SIZE_CONC_DESIGN_ASAP_NO_CA"],["FREE_SIZE_CONC_DESIGN_ASAP_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_NO_CA"],["FREE_SIZE_CONC_DESIGN_NO_HURRY_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA"],["SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA"],["SMALL_DEV_ONE_OS_CA"],["MEDIUM_DEV_ONE_OS_CA"],["LARGE_DEV_ONE_OS_CA"],["SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA"],["SMALL_DEV_TWO_OS_CA"],["MEDIUM_DEV_TWO_OS_CA"],["LARGE_DEV_TWO_OS_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_DEV_ONE_OS_RESP_CA"],["DEPLOY_MOBILE_NO_CA"],["DEPLOY_MOBILE_CA"],["DEPLOY_INTERNAL_NO_CA"],["DEPLOY_INTERNAL_CA"],["DEPLOY_MOBILE_INTERNAL_NO_CA"],["DEPLOY_MOBILE_INTERNAL_CA"]],"((TWO_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (THREE_DELIVERABLES && HAS_QA_DELIVERABLE ))":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"]],"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS_CA"]],"(THREE_DELIVERABLES && (!(HAS_QA_DELIVERABLE))) || (FOUR_DELIVERABLES && HAS_QA_DELIVERABLE )":[["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_ONE_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_ONE_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_TWO_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_TWO_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_TWO_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_INTERNAL_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_NO_CA","SMALL_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_NO_CA","MEDIUM_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_NO_CA","LARGE_DEV_TWO_OS_NO_CA","DEPLOY_MOBILE_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_THREE_DEVICE_CA","SMALL_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_THREE_DEVICE_CA","MEDIUM_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["LARGE_COMP_DESIGN_THREE_DEVICE_CA","LARGE_DEV_TWO_OS_CA","DEPLOY_MOBILE_INTERNAL_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_NO_CA","SMALL_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_NO_CA","MEDIUM_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_NO_CA","LARGE_DEV_ONE_OS_RESP_NO_CA","DEPLOY_INTERNAL_NO_CA"],["SMALL_COMP_DESIGN_ONE_DEVICE_CA","SMALL_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["MEDIUM_COMP_DESIGN_ONE_DEVICE_CA","MEDIUM_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"],["LARGE_COMP_DESIGN_ONE_DEVICE_CA","LARGE_DEV_ONE_OS_RESP_CA","DEPLOY_INTERNAL_CA"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your app cost. All prices are based on our 15 years of experience and thousand of projects. Final prices will be determined after our team does final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"theme":"light","validations":"isRequired,minLength:160","type":"textbox","title":"Please describe your app using 2-3 sentences","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.appDefinition.deliverables","icon":"question","description":"Select maximum **2 types of platforms** that you need to develop for. In most cases `limiting the scope` of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.\n- here\n- and here","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development","value":"dev-qa"},{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"QA","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"We will extensively test your source code on multiple environments and eliminate any bugs. This will make sure your app is 100% ready for the prime-time.","label":"QA, Fixes & Enhancements","value":"qa"},{"description":"Our team will ensure that your code is packaged and distributed correctly on the all target platforms and/or App Stores.","label":"Deployment","value":"deployment"}],"theme":"light","validations":"isRequired","introduction":"This is an introduction which is **shown after** the title but before the `question` options. You can choose an \n 1. option\n 2. option"},{"skills":[{"isFrequent":true,"description":"Java 2 Enterprise Edition","categories":["design","dev-qa","qa"],"title":"J2EE","value":1},{"isFrequent":false,"description":"Java programming language","categories":["dev-qa"],"title":"Java","value":2},{"isFrequent":false,"description":"JavaBean","categories":["qa","deployment"],"title":"JavaBean","value":3},{"isFrequent":true,"description":"Enterprise Java Beans","categories":["deployment"],"title":"EJB","value":4},{"isFrequent":false,"description":"Java ServerPages","categories":["design","dev-qa","qa"],"title":"JSP","value":5},{"isFrequent":false,"description":"Java Servlet technology","categories":["dev-qa"],"title":"Servlet","value":6},{"isFrequent":true,"description":"Java Applets","categories":["qa","deployment"],"title":"Applet","value":7},{"isFrequent":false,"description":"Java Applications","categories":["deployment"],"title":"Java Application","value":8},{"isFrequent":false,"description":"Java Messaging Service","categories":["design","dev-qa","qa"],"title":"JMS","value":9},{"isFrequent":true,"description":"Web Services","categories":["dev-qa"],"title":"Web Services","value":10},{"isFrequent":false,"description":"Microsoft .NET Framework","categories":["qa","deployment"],"title":".NET","value":11},{"isFrequent":false,"description":"Microsoft Visual Basic programming language","categories":["deployment"],"title":"VB","value":12},{"isFrequent":true,"description":"C++ programming language","categories":["design","dev-qa","qa"],"title":"C++","value":13},{"isFrequent":false,"description":"Microsoft Component Object Model","categories":["dev-qa"],"title":"COM","value":14},{"isFrequent":false,"description":"Extensible Markup Language","categories":["qa","deployment"],"title":"XML","value":15},{"isFrequent":true,"description":"XML Style Sheets","categories":["deployment"],"title":"XSL","value":16},{"isFrequent":false,"description":"Hyper Text Markup Language","categories":["design","dev-qa","qa"],"title":"HTML","value":4202325},{"isFrequent":false,"description":"Hyper Text Transfer Protocol","categories":["dev-qa"],"title":"HTTP","value":4202326},{"isFrequent":true,"description":"Microsoft C# programming language","categories":["qa","deployment"],"title":"C#","value":5905414},{"isFrequent":false,"description":"Visual Basic .NET Programming Language","categories":["deployment"],"title":"VB.NET","value":7375010},{"isFrequent":false,"description":"JavaServer Faces","categories":["design","dev-qa","qa"],"title":"JSF","value":14999206},{"isFrequent":true,"description":"Java Mobile","categories":["dev-qa"],"title":"J2ME","value":15035679},{"isFrequent":false,"description":"MIDP 2.0","categories":["qa","deployment"],"title":"MIDP 2.0","value":15035680},{"isFrequent":false,"description":"XUL","categories":["deployment"],"title":"XUL","value":22839202},{"isFrequent":true,"description":"JavaScript","categories":["design","dev-qa","qa"],"title":"JavaScript","value":22839204},{"isFrequent":false,"description":"Microsoft IIS","categories":["dev-qa"],"title":"IIS","value":26740931},{"isFrequent":false,"description":"Oracle 10g","categories":["qa","deployment"],"title":"Oracle 10g","value":26740932},{"isFrequent":true,"description":"Oracle 9i","categories":["deployment"],"title":"Oracle 9i","value":26740933},{"isFrequent":false,"description":"SQL Server","categories":["design","dev-qa","qa"],"title":"SQL Server","value":26753737},{"isFrequent":false,"description":"COM+","categories":["dev-qa"],"title":"COM+","value":26783183},{"isFrequent":true,"description":"Windows Workflow Foundation","categories":["qa","deployment"],"title":"Windows Workflow Foundation","value":26854281},{"isFrequent":false,"description":"Windows Communication Foundation","categories":["deployment"],"title":"Windows Communication Foundation","value":26854283},{"isFrequent":false,"description":"XAML","categories":["design","dev-qa","qa"],"title":"XAML","value":26930935},{"isFrequent":true,"description":"Microsoft SilverLight","categories":["dev-qa"],"title":"Microsoft SilverLight","value":26930938},{"isFrequent":false,"description":"Spring","categories":["qa","deployment"],"title":"Spring","value":26951706},{"isFrequent":false,"description":"Dojo","categories":["deployment"],"title":"Dojo","value":26951708},{"isFrequent":true,"description":"AJAX","categories":["design","dev-qa","qa"],"title":"AJAX","value":26951709},{"isFrequent":false,"description":"Struts","categories":["dev-qa"],"title":"Struts","value":27004060},{"isFrequent":false,"description":"CSS","categories":["qa","deployment"],"title":"CSS","value":27004061},{"isFrequent":true,"description":"Windows Presentation Foundation","categories":["deployment"],"title":"WPF","value":27048250}],"help":{"linkTitle":"What skills should I choose?","title":"What skill should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.skills","icon":"question","theme":"light","validations":"isRequired","title":"What skills do you need?","type":"skills","summaryTitle":"Skills","validationError":"Please, choose at least one skill.","required":true,"skillsCategoriesField":"details.appDefinition.deliverables"},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Comprehensive design","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create all the design deliverables for your app, including app icons, design specifications, and design assets.","label":"Comprehensive design for development","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"No problem! We can get you high-quality concept designs within a week. Do you need designs faster than this?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"Yes, I need designs ASAP","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"A week works for me!","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app would work in all mobile devices. Our most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app would be optimized for the larger form-factor of a tablet device.","label":"Tablet","value":"tablet"},{"description":"We will deliver a native desktop app, working under the selected desktop OS.","label":"Desktop","value":"desktop"},{"description":"Your app would be accessed via any web browser on desktop and mobile devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"Select maximum 2 types of platforms that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"A native mobile app is a smartphone application that is coded in a specific programming language, such as Objective C for iOS or Java for Android operating systems.","label":"Native","value":"native"},{"description":"A hybrid application (hybrid app) is one that combines elements of both native and Web applications.","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","title":"Should your web app be progressive or responsive?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your app would be optimized for all devices desktops.","label":"Progressive","value":"progressive"},{"description":"Your app would be optimized for all devices from mobile phones to large desktops.","label":"Responsive","value":"responsive"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"This is the most popular project size that can get a medium-sized app designed in a breeze","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"ONE_DELIVERABLE && HAS_QA_DELIVERABLE","hideTitle":true,"questions":[{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"( HAS_QA_DELIVERABLE && ONE_DELIVERABLE )","fieldName":"details.appDefinition.qaType","icon":"question","options":[{"label":"Real World Unstructured Testing","value":"real-world-unstructured"},{"label":"Real World Structured Testing","value":"real-world-structured"},{"label":"Mobility Testing","value":"mobility-testing"},{"label":"Automation Testing","value":"automated-testing"},{"label":"Performance Testing","value":"performance-testing"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","validationError":"Please, choose what do you need.","required":true},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","options":[{"label":"Test Case Creation","value":"test-case-creation"},{"label":"Test Case Execution","value":"test-case-execution"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need us to help you with?","type":"checkbox-group","validationError":"Please, choose what do you need us to help with.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_STRUCT_TESTING","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 50 test cases","value":"upto-50"},{"condition":"(STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE)","label":"Up to 100 test cases","value":"upto-100"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 150 test cases","value":"upto-150"},{"condition":"(STRUCT_TEST_CASE_EXECUTION)","label":"Up to 300 test cases","value":"upto-300"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"REAL_WORLD_UNSTRUCT_TESTING","fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","options":[{"label":"Up to 10","value":"upto-10"},{"label":"Up to 30","value":"upto-30"}],"description":"","theme":"light","validations":"isRequired","title":"How many screens need to be tested?","type":"radio-group","validationError":"Please, choose how many test cases you need or have.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"AUTOMATED_TESTING","fieldName":"details.appDefinition.automatedTestsCount","icon":"question","options":[{"label":"Up to 50 test cases","value":"upto-50"},{"label":"Up to 100 test cases","value":"upto-100"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"fieldName":"details.appDefinition.deploymentTargets","icon":"question","description":"","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"Do you want a Community Architect to oversee your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"Do I need an architect?","title":"Do I need an architect?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"We will assign a technical architect to guide you through all the hurdles of design, development, and delivery. They will make sure that your scope and technical requirements are optimal for your project, and manage communication with our project managers.","label":"Yes (Managed)","value":"yes"},{"summaryLabel":"No","description":"You will have to take technical decisions and discuss requirements with our project managers.","label":"No (Unmanaged)","value":"no"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","title":"Design features","type":"add-ons","category":"design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Development features","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_QA_DELIVERABLE","fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA features","type":"add-ons","category":"qa"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"Delivery features","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"duration":3,"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"duration":24,"id":"development","deliverableKey":"dev-qa","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"duration":3,"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"},{"duration":1,"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

Not sure if you got your estimate right? Chat with us now →

Secondary process note: Blah blah blah, Ariel will find a use for it later.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{"2-front-end-development-i":{"duration":19,"name":"Front-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"4-back-end-development-i":{"duration":19,"name":"Back-End Development, Pt. I","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"3-front-end-development-ii":{"duration":19,"name":"Front-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"5-back-end-development-ii":{"duration":19,"name":"Back-End Development, Pt. II","products":[{"id":27,"productKey":"development-iteration-3-milestones"}]},"1-app-design":{"duration":25,"name":"App Design","products":[{"id":26,"productKey":"design-iteration-3-milestones"}]},"6-qa-and-bug-fixes":{"duration":24,"name":"QA & Bug Fixes","products":[{"id":30,"productKey":"qa-iteration"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-01-22T09:08:05.270Z","updatedAt":"2020-05-05T09:59:37.626Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":238,"name":"User Sentiment Testing","key":"qa_user_sentiment_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"user-sentiment-analysis","question":"What kind of quality assurance (QA) do you need?","info":"Compare applications with competitor products in the market to derive improvement actions.","aliases":["qa_user_sentiment_testing","qa-user-sentiment-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project.","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"User Sentiment Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will user sentiment testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"User Sentiment Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T04:28:19.748Z","updatedAt":"2020-05-05T09:59:37.682Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":236,"name":"Regression Automation","key":"qa_regression_automation","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Expected Deliverables

\n
  • Peer-reviewed test scripts and framework
  • \n
  • Test execution report (if app access is given) or detailed set-up and run test script documentation for your target environment
  • \n
\n
"}]},"icon":"regression-automation","question":"What kind of quality assurance (QA) do you need?","info":"Build reusable test scripts using open source tools (Selenium, Appium, etc.) to accelerate app delivery.","aliases":["qa_regression_automation","qa_-egression-automation"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Regression Automation"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalRegressionTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 50 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 50 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalRegressionTests == 'yes'","fieldName":"details.appDefinition.regressionAutomationTestCount","icon":"question","options":[{"label":"50-100","value":"50-100"},{"label":"100-150","value":"100-150"},{"label":"150-200","value":"150-200"},{"label":"200-250","value":"200-250"},{"label":"250-300","value":"250-300"},{"label":"300+","value":"300+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Regression Automation","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T04:10:25.854Z","updatedAt":"2020-05-05T09:59:37.682Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":240,"name":"Localization/Language Testing","key":"qa_language_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"localization-testing","question":"What kind of quality assurance (QA) do you need?","info":"Validate the product (UI, Content) built for a particular culture or locale settings.","aliases":["qa_language_testing","qa-language-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Localization/Language Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will localization/language testing cover more than 10 screens?","type":"radio-group","validationError":"Please, let us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Localization/Language Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T05:18:48.446Z","updatedAt":"2020-05-05T09:59:37.683Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":225,"name":"Engage Talent","key":"talent_as_a_service-v1.1","category":"talent-as-a-service","subCategory":null,"metadata":{"detailLink":"https://www.topcoder.com/case-studies/building-apps-on-ethereum/","deliverables":[{"infoHTML":"

Expected Deliverables

Talent as a Service (TaaS) from Topcoder gives our enterprise customers access to the best freelancers the gig economy has to offer — without risk, expensive full time hires, or wasting time deciding on designers and developers based on stars or reviews. Your Topcoder Copilot guides the process and manages logistics from start to finish.
"}]},"icon":"engage-talent","question":"What type of talent you are looking for?","info":"You need top talent to deliver on your most pressing ideas, to help you differentiate, and to get things done fast.","aliases":["talent-as-a-service","talent_as_a_service"],"scope":{"addonPriceConfig":{},"basePriceEstimate":0,"priceConfig":{"HAS_NEW_PROJECT_DELIVERABLE":[["NEW_PROJECT"]]},"hideEstimation":true,"hidePrice":true,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you creating this intake?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"You need top talent to deliver on your most pressing ideas, to help you differentiate, and to get things done fast. Talent as a Service (TaaS) from Topcoder gives our customers access to the best freelancers the gig economy has to offer — without risk, expensive full time hires or wasting time deciding on designers and developers based on stars or reviews.","theme":"light","type":"message"},{"questions":[{"fieldName":"description","theme":"light","type":"textbox","title":"Tell us about your project"},{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Name your project","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"fieldName":"details.taasDefinition.deliverables","icon":"question","options":[{"summaryLabel":"New Project","description":"","label":"New project or idea exploration","value":"newProject"},{"summaryLabel":"Existing Project","description":"","label":"Help on an existing project","value":"existingProject"},{"summaryLabel":"Ongoing Assistance","description":"","label":"Ongoing assistance on several projects","value":"ongoingAssistanceOnProject"},{"description":"","label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"What type of project do you need help with?","type":"checkbox-group","summaryTitle":"Talent Area","validationError":"Please, choose what do you need.","required":true},{"condition":"HAS_OTHER_DELIVERABLE","fieldName":"details.taasDefinition.otherBrief","icon":"question","description":"","title":"Please describe the type of talent you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.help.brief","icon":"question","description":"","title":"Help us understand the types of help you're looking for.","type":"textbox","summaryTitle":"Help Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-helpDescription","type":"questions"},{"hideTitle":true,"questions":[{"skills":{"frequent":[],"categoriesField":"details.taasDefinition.deliverables"},"fieldName":"details.taasDefinition.team.skills","icon":"question","description":"","theme":"light","validations":"isRequired","title":"What skills are important for your team to have?","type":"skills","summaryTitle":"Team Skills","validationError":"Please, choose at least one skill.","required":true},{"condition":"HAS_OTHER_SKILLS","fieldName":"details.taasDefinition.otherSkills","icon":"question","description":"","title":"Please describe the other skills you require.","type":"textbox","summaryTitle":"Others skills"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-skills","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.tools","icon":"question","options":[{"label":"Github","value":"github"},{"label":"GitLab","value":"gitlab"},{"label":"Jira","value":"jira"},{"label":"Trello","value":"trello"},{"label":"Basecamp","value":"basecamp"},{"label":"I'm not using anything, but would love a recommendation.","value":"recommendation"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Are you using a specific tool to manage work?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one tool.","required":true},{"condition":"HAS_OTHER_TOOLS","fieldName":"details.taasDefinition.otherToolsBrief","icon":"question","description":"","title":"Please describe the type of other tools you require.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-tools","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.resourceHours","icon":"question","description":"","validationErrors":{"isPositiveNumber":"Please, enter a positive number."},"validations":"isPositiveNumber","title":"How many full-time (40hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Full-Time"},{"fieldName":"details.taasDefinition.partTimeresourceHours","icon":"question","description":"","validationErrors":{"isNonNegativeNumber":"Please, enter a positive number or zero."},"validations":"isNonNegativeNumber","title":"How many part-time (20hrs/wk) resources do you need?","type":"textinput","summaryTitle":"Part-Time"},{"fieldName":"details.taasDefinition.resourceDuration","icon":"question","options":[{"label":"Less than 1 month","value":"rangeOne"},{"label":"1-3 months","value":"rangeTwo"},{"label":"3-6 months","value":"rangeThree"},{"label":"More than 6 months","value":"rangeFour"}],"description":"","theme":"light","title":"How long would you like these resources for?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."},{"fieldName":"details.taasDefinition.kickOffTime","icon":"question","options":[{"label":"I’m ready now","value":"rangeOne"},{"label":"1-2 weeks","value":"rangeTwo"},{"label":"3-4 weeks","value":"rangeThree"},{"label":"I’m not sure yet","value":"rangeFour"}],"description":"","theme":"light","title":"When do you need to start?","type":"radio-group","required":true,"validationError":"Please let us know duration you will need resources for."}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"id":"talentDefinition","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.taasDefinition.otherRequirements","icon":"question","options":[{"label":"Specific background checks","value":"specificBackgroundChecks"},{"label":"Special clearance","value":"specialClearance"},{"label":"Access to restricted development environments","value":"restrictedDevelopment"},{"label":"Other","value":"other"}],"description":"","theme":"light","validations":"isRequired","title":"Do you require any of the following?","type":"checkbox-group","summaryTitle":"Tools","validationError":"Please, choose at least one requirement.","required":true},{"condition":"HAS_OTHER_REQUIREMENT","fieldName":"details.taasDefinition.otherRequirementBrief","icon":"question","description":"","title":"Please describe any other requirement.","type":"textbox","summaryTitle":"Others Description"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"talentDefinition-otherRequirements","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Your Talent Requirements","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Talent Pool

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev","title":"Development","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"newProject","deliverableKey":"newProject","title":"New Project","enableCondition":"HAS_NEW_PROJECT_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null,"buildingBlocks":{"NEW_PROJECT":{"maxTime":28,"metadata":{"deliverable":"newProject"},"price":"8543","minTime":28,"conditions":"HAS_NEW_PROJECT_DELIVERABLE"}},"preparedConditions":{"HAS_DATA_SCIENCE_DELIVERABLE":"(details.taasDefinition.deliverables contains 'data-science')","HAS_DESIGN_DELIVERABLE":"(details.taasDefinition.deliverables contains 'design')","HAS_DEV_DELIVERABLE":"(details.taasDefinition.deliverables contains 'dev')","HAS_OTHER_SKILLS":"(details.taasDefinition.team.skills contains 'other')","HAS_NEW_PROJECT_DELIVERABLE":"(details.taasDefinition.deliverables contains 'newProject')","HAS_OTHER_DELIVERABLE":"(details.taasDefinition.deliverables contains 'other')","HAS_OTHER_REQUIREMENT":"(details.taasDefinition.otherRequirements contains 'other')","TRUTHY":"( 1 == 1)","HAS_QA_DELIVERABLE":"(details.taasDefinition.deliverables contains 'qa')","HAS_OTHER_TOOLS":"(details.taasDefinition.tools contains 'other')","FALSY":"( 1 == 2)"},"showPrice":false,"priceConfig-old":null,"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3},"phases":{"1-dev-iteration-i":{"duration":25,"name":"Dev Iteration","products":[{"id":29,"productKey":"development-iteration-5-milestones"}]}},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-11-02T07:46:06.000Z","updatedAt":"2020-05-05T09:59:37.683Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":235,"name":"Performance Improvement Testing","key":"qa_performance_improvement_testing","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"infoHTML":"

Detailed report with a list of issues along with:

\n
  • Severity
  • \n
  • Platform(s)
  • \n
  • Steps for reproduction
  • \n
  • Screenshots or videos
  • \n
\n
"}]},"icon":"performance-improvement","question":"What kind of quality assurance (QA) do you need?","info":"Test responsiveness and stability of web and mobile applications under specific workloads.","aliases":["qa_performance_improvement_testing","qa-performance-improvement-testing"],"scope":{"buildingBlocks":{},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"questions":[{"userPermissionCondition":{"allowRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Client Request","label":"Submitting Client Request","value":"client-request"},{"summaryLabel":"Internal Project","label":"Internal Project","value":"internal-project"},{"summaryLabel":"Demo/Test/Other","label":"Demo/Test/Other","value":"demo-test-other"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose you intake purpose.","required":true},{"userPermissionCondition":{"denyRule":{"topcoderRoles":["administrator","Connect Administrator","Connect Copilot","Connect Manager","Connect Account Manager","Connect Copilot Manager"]},"allowRule":{"topcoderRoles":["Topcoder User"]}},"fieldName":"details.intakePurpose","icon":"question","options":[{"summaryLabel":"Work done","label":"I need work done","value":"work-done"},{"summaryLabel":"Exploring options","label":"I am just exploring my options","value":"exploring-options"}],"description":"","theme":"light","validations":"isRequired","title":"Why are you starting this project today?","type":"radio-group","summaryTitle":"Intake purpose","validationError":"Please, choose the purpose of this project.","required":true}],"title":"","type":"questions"}],"hiddenOnEdit":true,"statusText":"","id":"before-start","title":"Before we start"},{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"Create a title for this project","validationError":"Please, provide a title to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"Project Title","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Performance Improvement Testing"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

"},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.concurrentUsers","icon":"question","options":[{"label":"Up to 500","value":"upto-500"},{"label":"500-1000","value":"500-1000"},{"label":"1000-5000","value":"1000-5000"},{"label":"5000+","value":"above-5000"}],"description":"","theme":"light","validations":"isRequired","title":"What is the desired system load of concurrent users?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.processTransactionCount","icon":"question","options":[{"label":"Up to 5","value":"upto-5"},{"label":"5-10","value":"5-10"},{"label":"10-25","value":"10-25"},{"label":"25+","value":"above-25"}],"description":"","theme":"light","validations":"isRequired","title":"Approximately how many business processes/transactions are included in this performance testing?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"details.appDefinition.description","icon":"question","description":"","validations":"isRequired","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description","validationError":"Please, describe the application."},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"Performance Improvement Testing","required":true},{"subSections":[{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false},{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":2}]}],"hiddenOnEdit":true,"footer":{"content":""},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2020-02-14T03:55:43.798Z","updatedAt":"2020-05-05T09:59:37.683Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":246,"name":"Direct Project","key":"direct-project","category":"app_dev","subCategory":null,"metadata":{},"icon":"../../assets/icons/product-dev-other.svg","question":"Direct Project","info":"Get help with any part of your app or software","aliases":["direct-project"],"scope":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.goal.value","icon":"question","description":"Describe your objectives for creating this application","title":"What is the goal of your application? How will people use it?","type":"textbox","required":true,"validationError":"Please let us know the goal of your application"},{"fieldName":"details.appDefinition.users.value","icon":"question","description":"Describe the roles and needs of your target users","title":"Who are the users of your application? ","type":"textbox","required":true,"validationError":"Please let us know users of your application"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Development Integration","required":true}]},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2020-05-01T17:45:09.387Z","updatedAt":"2020-05-05T09:59:37.683Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":220,"name":"QA Services","key":"qa-form-v1a","category":"scoped-solutions","subCategory":"quality_assurance","metadata":{"deliverables":[{"subTextHTML":"","infoHTML":"

Exploratory Testing

Validate functionality and usability of web and mobile apps in-the-wild with real-life users. Detailed report with a list of issues along with:

  • Severity
  • Platform(s)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"Select","detailsLink":"https://www.topcoder.com/case-studies/microsoft/","infoHTML":"

Regression Testing

Validate business-critical workflows with structured testing.

  • Test case creation (if requested)
  • Execution of test cases
  • Validated defect log in Github or Gitlab
  • Screenshots or videos of logged defects
"},{"subTextHTML":"","infoHTML":"

Product Beta Testing/User Acceptance Testing

Expand risk coverage and generate end-user feedback early in the life cycle.

  • Execution of test cases
  • Validated defect log in Github or Gitlab
  • Screenshots or videos of logged defects
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/holiday-readiness-blog/","infoHTML":"

Accessibility Testing

WCAG 2.1 standards-based usability testing to validate end-user experience and ensure digital accessibility.Detailed report with a list of accessibility compliance issues and UX feedback/ recommendations:

  • Severity
  • Screenshots or videos
"},{"subTextHTML":"","infoHTML":"

Compatibility Testing

Cross-browser, device testing including network, geographical coverage to assure app launch success.Detailed report with a list of browser-device compatibility issues by:

  • Severity
  • Platforms/ Devices/ Browsers
  • Steps for reproduction
  • Screenshots or videos of logged defects
"},{"subTextHTML":"","infoHTML":"

Localization/ Language Testing

Validate the product (UI, Content) built for a particular culture or locale settings.Detailed report with a list of issues along with:

  • Severity
  • Platform/ Network/ Geo (any)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/topcoder-structured-test-case/","infoHTML":"

Functional/ Feature Testing

Testing features in an agile environment to speed-up test case design and execution activities. Detailed report with a list of issues along with:

  • Severity
  • Platform(s)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/topcoder-quality-service-mobile-app-testing/","infoHTML":"

Mobile Testing

Execute functional and non-functional tests including device compatibility certification and UX study. Detailed report with a list of issues along with:

  • Severity
  • Platform(s)
  • Steps for reproduction
  • Screenshots or videos
"},{"subTextHTML":"","detailsLink":"https://www.topcoder.com/topcoder-automated-testing/","infoHTML":"

Regression Automation

Build reusable test scripts using open source tools (Selenium, Appium, etc.) to accelerate app delivery.

  • Peer-reviewed test scripts and framework
  • Test execution report (if app access is given) or detailed set-up and run test script documentation for your target environment
"}]},"icon":"test","question":"test","info":"Choose the QA solution that meets your testing goals.","aliases":["qa-form-v1"],"scope":{"buildingBlocks":{"HAS_UNIT_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"7095","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NEEDED)"},"MOBILITY_TESTS_NO_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"3663","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3011","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1469","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"8146","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"3446","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"10051","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"7383","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"2696","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"5197","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_STRUCT_TEST_EXECUTION_NO_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"2144","minTime":5,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_AUTOMATED_TESTS_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"1618","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"6085","minTime":10,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_SMALL && CA_NEEDED)"},"LARGE_UNSTRUCT_TESTS_NO_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"1084","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"1437","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"8107","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NEEDED)"},"PERFORMANCE_TESTS":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"5587","minTime":20,"conditions":"(PERFORMANCE_TESTING)"},"HAS_UNIT_TESTING_ADDON_NO_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"1335","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UNIT_TESTING_ADDON && CA_NOT_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA":{"maxTime":14,"metadata":{"deliverable":"qa"},"price":"5454","minTime":14,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && STRUCT_TEST_CASE_EXECUTION && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NOT_NEEDED)"},"LARGE_AUTOMATION_TESTING_ADDON_CA":{"maxTime":12,"metadata":{"deliverable":"dev-qa"},"price":"2741","minTime":12,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6755","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"SMALL_UNSTRUCT_TESTS_CA":{"maxTime":5,"metadata":{"deliverable":"qa"},"price":"9989","minTime":5,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_SMALL && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"6881","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NEEDED)"},"PERF_TESTING_ADDON_CA":{"maxTime":20,"metadata":{"deliverable":"dev-qa"},"price":"3267","minTime":20,"conditions":"( HAS_DEV_DELIVERABLE && HAS_PERF_TESTING_ADDON && CA_NEEDED)"},"LARGE_AUTOMATED_TESTS_NO_CA":{"maxTime":12,"metadata":{"deliverable":"qa"},"price":"7140","minTime":12,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_LARGE && CA_NOT_NEEDED)"},"SMALL_AUTOMATION_TESTING_ADDON_NO_CA":{"maxTime":7,"metadata":{"deliverable":"dev-qa"},"price":"3848","minTime":7,"conditions":"( HAS_DEV_DELIVERABLE && HAS_AUTOMATION_TESTING_ADDON && AUTOMATED_TEST_COUNT_SMALL && CA_NOT_NEEDED)"},"LARGE_UNSTRUCT_TESTS_CA":{"maxTime":10,"metadata":{"deliverable":"qa"},"price":"4272","minTime":10,"conditions":"(UNSTRUCTURED_TESTING && UNSTRUCT_SCREEN_COUNT_LARGE && CA_NEEDED)"},"LARGE_STRUCT_TEST_CREATION_NO_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"5700","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_CREATION && ONE_QA_DELIVERABLE && TEST_CASE_CREATION_COUNT_LARGE && CA_NOT_NEEDED)"},"HAS_UAT_ENHANCEMENTS_ADDON_NO_CA":{"maxTime":15,"metadata":{"deliverable":"dev-qa"},"price":"6891","minTime":15,"conditions":"( HAS_DEV_DELIVERABLE && HAS_UAT_ENHANCEMENTS_ADDON && CA_NOT_NEEDED)"},"MOBILITY_TESTS_CA":{"maxTime":20,"metadata":{"deliverable":"qa"},"price":"586","minTime":20,"conditions":"(MOBILITY_TESTING && CA_NEEDED)"},"LARGE_STRUCT_TEST_EXECUTION_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"247","minTime":7,"conditions":"(REGRESSION_OR_UAT && STRUCT_TEST_CASE_EXECUTION && ONE_QA_DELIVERABLE && TEST_CASE_EXECUTION_COUNT_LARGE && CA_NEEDED)"},"SMALL_AUTOMATED_TESTS_CA":{"maxTime":7,"metadata":{"deliverable":"qa"},"price":"2966","minTime":7,"conditions":"(REGRESSION_AUTOMATION && REG_AUTOMATED_TEST_COUNT_SMALL && CA_NEEDED)"}},"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","UNSTRUCTURED_TESTING":"(details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_QA_DELIVERABLE":"true","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","REGRESSION_OR_UAT":"(details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","REG_AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.regressionAutomationTestCount == 'upto-100')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","ONE_DELIVERABLE":"true","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","REG_AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.regressionAutomationTestCount == 'upto-50')","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","REGRESSION_AUTOMATION":"(details.appDefinition.qaType == 'regression-automation')"},"addonPriceConfig":{},"priceConfig-old":null,"basePriceEstimate":0,"priceConfig":{"ONE_DELIVERABLE && HAS_QA_DELIVERABLE":[["SMALL_STRUCT_TEST_CREATION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_CA"],["LARGE_STRUCT_TEST_CREATION_CA"],["SMALL_STRUCT_TEST_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_EXECUTION_CA"],["LARGE_STRUCT_TEST_EXECUTION_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_NO_CA"],["SMALL_STRUCT_TEST_CREATION_EXECUTION_CA"],["LARGE_STRUCT_TEST_CREATION_EXECUTION_CA"],["SMALL_UNSTRUCT_TESTS_NO_CA"],["LARGE_UNSTRUCT_TESTS_NO_CA"],["SMALL_UNSTRUCT_TESTS_CA"],["LARGE_UNSTRUCT_TESTS_CA"],["SMALL_AUTOMATED_TESTS_NO_CA"],["LARGE_AUTOMATED_TESTS_NO_CA"],["SMALL_AUTOMATED_TESTS_CA"],["LARGE_AUTOMATED_TESTS_CA"],["MOBILITY_TESTS_NO_CA"],["MOBILITY_TESTS_CA"],["PERFORMANCE_TESTS"]]},"wizard":{"previousStepVisibility":"none","enabled":true},"baseTimeEstimateMin":3,"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"QA & Testing: Basic Details"},{"subSections":[{"hideTitle":true,"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Structured testing is used to deliver our Regression Testing and End-User Acceptance/Beta Testing solutions.

Unstructured testing is used to deliver our Compatibility Testing, Exploratory Testing, Accessibility Testing, Localization/Language Testing, Functional/Feature Testing, and User Sentiment Analysis solutions. Unstructured testing does not use pre-defined test scripts -- this is true “in-the-wild” testing that can provide many forms of feedback on your application.

Regression Automation test suites can be created by Topcoder using tools like Selenium.

Automation Test Suites can be created by Topcoder using tools like Selenium, starting at up to 50 test cases.

Performance Testing by Topcoder will allow you to test several key functions of your application at scale with hundreds of virtual users. Reporting will be provided with specific recommendations to address any performance issues.

Mobility Testing can target up to 5 devices using our community of QA experts.

"},"fieldName":"details.appDefinition.qaType","icon":"question","options":[{"queryParamSelectCondition":"qaType == 'regression'","description":"Validate business-critical workflows in a structured manner","label":"Regression Testing","value":"regression-testing"},{"queryParamSelectCondition":"qaType == 'end-user-acceptance-testing'","summaryLabel":"Acceptance Testing","description":"Expand risk coverage and generate end-user feedback early in the life cycle","label":"End-User Acceptance Testing/Beta Testing ","value":"end-user-acceptance-testing"},{"queryParamSelectCondition":"qaType == 'compatibility-testing'","description":"Cross-browser, device testing including network, geographical coverage to assure app launch success","label":"Compatibility Testing","value":"compatibility-testing"},{"queryParamSelectCondition":"qaType == 'exploratory-testing'","description":"Validate functionality and usability of web and mobile apps in-the-wild with real-life users","label":"Exploratory Testing","value":"exploratory-testing"},{"queryParamSelectCondition":"qaType == 'accessibility-compliance'","description":"WCAG 2.1 standards-based usability testing and verification to confirm and guide to compliance","label":"Accessibility Testing","value":"accessibility-testing"},{"queryParamSelectCondition":"qaType == 'localization-testing'","description":"Validate the product (UI, Content) built for a particular culture or locale settings","label":"Localization/Language Testing","value":"localization-testing"},{"queryParamSelectCondition":"qaType == 'functional-feature-testing'","description":"Testing features in an agile environment to speed-up design and execution activities","label":"Functional/Feature Testing","value":"functional-testing"},{"queryParamSelectCondition":"qaType == 'sentiment-analysis'","description":"Compare applications with competitor products in the market to derive improvement actions","label":"User Sentiment Analysis","value":"sentiment-analysis"},{"queryParamSelectCondition":"qaType == 'regression-automation'","description":"Build reusable test scripts and frameworks using open source tools to accelerate app delivery & improve ROI","label":"Regression Automation","value":"regression-automation"},{"queryParamSelectCondition":"qaType == 'performance-improvement'","description":"Test responsiveness and stability of web and mobile applications under specific workloads","label":"Performance Testing","value":"performance-testing"},{"queryParamSelectCondition":"qaType == 'mobile-app-certification'","description":"Execute functional & non-functional tests including device compatibility certification & competitive analysis","label":"Mobile App Certification","value":"mobile-app-certifcation"}],"description":"","theme":"light","validations":"isRequired","title":"What type of QA you need?","type":"radio-group","summaryTitle":"QA Service","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.structuredTestWorkType","icon":"question","description":"","title":"What do you need as a part of your regression testing?","type":"checkbox-group","summaryTitle":"Work Required","validationError":"Please, choose what do you need us to help with.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Test Case Creation involves generating structured test cases that can be followed during test case execution.

Test Case Execution involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.

"},"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","options":[{"queryParamSelectCondition":"workType == 'all'","description":"Involves generating structured test cases that can be followed during test case execution.","label":"Test Case Creation","value":"test-case-creation"},{"queryParamSelectCondition":"workType == 'all'","description":"Involves executing testing against the structured test cases created by Topcoder or against structured test cases provided by the client.","label":"Test Case Execution","value":"test-case-execution"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-testing' || details.appDefinition.qaType == 'end-user-acceptance-testing'","fieldName":"details.appDefinition.needAdditionalStructTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 150 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 150 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalStructTests == 'yes'","fieldName":"details.appDefinition.structuredTestsCount","icon":"question","options":[{"label":"150-300","value":"150-300"},{"label":"300-450","value":"300-450"},{"label":"450-600","value":"450-600"},{"label":"600+","value":"600+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you anticipate requiring?","type":"radio-group","summaryTitle":"Test Case/Screen Count","validationError":"Please, choose how many test cases you need or have.","required":true},{"condition":"details.appDefinition.qaType == 'compatibility-testing' || details.appDefinition.qaType == 'exploratory-testing' || details.appDefinition.qaType == 'accessibility-testing' || details.appDefinition.qaType == 'localization-testing' || details.appDefinition.qaType == 'functional-testing' || details.appDefinition.qaType == 'sentiment-analysis'","fieldName":"details.appDefinition.needAdditionalUnstructScreens","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 10 screens?","type":"radio-group","validationError":"Please, ley us know if you need more than 10 screens.","required":true},{"fieldName":"details.appDefinition.unstructuredTestsScreenCount","icon":"question","description":"","title":"How many screens require testing?","type":"radio-group","summaryTitle":"Screen Count","validationError":"Please, choose how many screens you need testing for.","required":true,"help":{"linkTitle":"What if I need more test cases/screens?","title":"What if I need more test cases/screens?","content":"

If your testing effort will require the creation or execution of more test cases/screens highlighted in our standard solutions, please indicate this in the Notes section prior to submitting your form.

"},"condition":"details.appDefinition.needAdditionalUnstructScreens == 'yes'","options":[{"label":"10-20","value":"10-20"},{"label":"20-30","value":"20-30"},{"label":"30-40","value":"30-40"},{"label":"40-50","value":"40-50"},{"label":"50+","value":"50+"}],"theme":"light","validations":"isRequired"},{"condition":"details.appDefinition.qaType == 'regression-automation'","fieldName":"details.appDefinition.needAdditionalRegressionTests","icon":"question","options":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"Will test coverage require more than 50 test cases?","type":"radio-group","validationError":"Please, ley us know if you need more than 50 test cases.","required":true},{"condition":"details.appDefinition.needAdditionalRegressionTests == 'yes'","fieldName":"details.appDefinition.regressionAutomationTestCount","icon":"question","options":[{"label":"50-100","value":"50-100"},{"label":"100-150","value":"100-150"},{"label":"150-200","value":"150-200"},{"label":"200-250","value":"200-250"},{"label":"250-300","value":"250-300"},{"label":"300+","value":"300+"}],"description":"","theme":"light","validations":"isRequired","title":"How many test cases do you need?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'performance-improvement'","fieldName":"details.appDefinition.concurrentUsers","icon":"question","options":[{"label":"Up to 500","value":"upto-500"},{"label":"500-1000","value":"500-1000"},{"label":"1000-5000","value":"1000-5000"},{"label":"5000+","value":"above-5000"}],"description":"","theme":"light","validations":"isRequired","title":"What is the desired system load of concurrent users?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"details.appDefinition.qaType == 'performance-improvement'","fieldName":"details.appDefinition.processTransactionCount","icon":"question","options":[{"label":"Up to 5","value":"upto-5"},{"label":"5-10","value":"5-10"},{"label":"10-25","value":"10-25"},{"label":"25+","value":"above-25"}],"description":"","theme":"light","validations":"isRequired","title":"Approximately how many business processes/transactions are included in this performance testing?","type":"radio-group","validationError":"Please, choose how many test cases you have or need.","required":true},{"fieldName":"description","icon":"question","description":"","title":"Briefly describe the application we will be testing.","type":"textbox","summaryTitle":"Description"},{"fieldName":"details.appDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"qa-deliverable-questions","type":"questions"},{"condition":"details.appDefinition.qaType != 'performance-testing'","hideTitle":true,"questions":[{"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

All Topcoder projects engage a Challenge Manager, a member of the community who helps to set-up and execute work with the community.

Topcoder recommends including a Project Manager on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. A Project Manager will provide additional oversight to your project.

"},"fieldName":"details.appDefinition.caNeeded","icon":"question","options":[{"summaryLabel":"Project Manager + Challenge Manager","description":"Challenge managers will work with the Community on the execution of your deliverables. A Project Manager will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Challenge Manager","value":"yes"},{"summaryLabel":"Challenge Manager only","description":"You will partner directly with your Challenge Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Challenge Manager only","value":"no"}],"description":"","theme":"light","validations":"isRequired","title":"What kind of support do you want on your project?","type":"radio-group","validationError":"Please, ley us know if you need a dedicated manager.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Files","type":"files","required":false}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_QA_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"fieldName":"details.appDefinition.addons.qa","icon":"question","description":"Please select each required feature. Please note that each added feature incurs a cost, but that the cost will be detailed and broken out in the final project proposal.","theme":"light","summaryMode":"quantity","title":"QA add-ons","type":"add-ons","category":"qa"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"qa","deliverableKey":"qa","title":"QA","enableCondition":"HAS_DEV_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}],"baseTimeEstimateMax":6,"priceConfigOpt":null},"phases":{},"form":null,"planConfig":null,"priceConfig":null,"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-08-23T11:27:40.000Z","updatedAt":"2020-05-05T09:59:37.682Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"ProductTemplate":[{"id":165,"name":"First to Finish","productKey":"challenge-FIRST_2_FINISH","category":"generic","subCategory":"challenge","icon":"challenge-FIRST_2_FINISH","brief":"First to Finish","details":"First to Finish","aliases":["challenge-first_2_finish"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T05:53:19.000Z","updatedAt":"2020-05-05T09:59:38.181Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":21,"name":"Development Integration","productKey":"generic_dev","category":"generic","subCategory":"generic","icon":"../../assets/icons/product-dev-other.svg","brief":"Development Integration","details":"Get help with any part of your app or software","aliases":["generic-development","generic_dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","hidden":true,"icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","hidden":true,"icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","hidden":true,"icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","hidden":true,"icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Integration","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-22T05:44:45.000Z","updatedAt":"2020-05-05T09:59:38.182Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":22,"name":"Mobility Testing","productKey":"mobility_testing","category":"generic","subCategory":"generic","icon":"product-qa-mobility-testing","brief":"TBD","details":"App Certification, Lab on Hire, User Sentiment Analysis","aliases":["mobility-testing","mobility_testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.mobilityTestingType","hidden":true,"icon":"question","options":[{"title":"Select","value":""},{"title":"Banking or Financial Services","value":"finserv"},{"title":"eCommerce","value":"ecommerce"},{"title":"Media / Entertainment","value":"entertainment"},{"title":"Gaming","value":"gaming"},{"title":"Health and Fitness","value":"health"},{"title":"Manufacturing","value":"manufacturing"},{"title":"Retail","value":"retail"},{"title":"Travel / Transportation","value":"travel"},{"title":"Other","value":"other"}],"description":"Please let us know the type of application to test. If you are unsure, please select \"Other\"","type":"select-dropdown","title":"What kind of application would you like to test?","required":true,"validationError":"Please let us know what kind of application you would like to test."},{"fieldName":"details.appDefinition.testCases","hidden":true,"icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Please let us know if you have any test cases written. If not, they can be created as part of your test cycle.","type":"radio-group","title":"Do you have test cases written?","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.userInfo","hidden":true,"icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help us find the best testers for your application.","type":"textbox","title":"Please tell us about your users."},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Mobility Testing","required":true},{"subSections":[{"questions":[{"fieldName":"details.testingNeeds.description","icon":"question","description":"","id":"testingNeeds.description","type":"textbox","title":"Please describe your website and/or application."},{"fieldName":"details.testingNeeds.inScope","icon":"question","description":"","id":"testingNeeds.inScope","type":"textbox","title":"Please describe which features or components are in-scope in this testing effort."},{"fieldName":"details.testingNeeds.outOfScope","icon":"question","description":"","id":"testingNeeds.outOfScope","type":"textbox","title":"Are any features or components out of scope? If yes, please describe."},{"fieldName":"details.testingNeeds.duration","icon":"question","description":"","id":"testingNeeds.duration","type":"textbox","title":"Do you have a specific timeline for testing? If so, please provide approximate start and end dates."}],"description":"","id":"scope","type":"questions","title":"Scope","required":false},{"questions":[{"fieldName":"details.testerDetails.demographics","icon":"question","description":"","id":"testerDetails.demographics","type":"textbox","title":"Do you have preferred demographics you would like to target?"},{"fieldName":"details.testerDetails.geographies","icon":"question","description":"","id":"testerDetails.geographies","type":"textbox","title":"Would you like to target any specific geographies?"},{"fieldName":"details.testerDetails.skills","icon":"question","description":"","id":"testerDetails.skills","type":"textbox","title":"Are any specific skills required to test your application? If so, please list them."}],"description":"","id":"testerDetails","type":"questions","title":"Tester Details","required":false},{"questions":[{"fieldName":"details.testEnvironment.environmentDetails","icon":"question","description":"","id":"testEnvironment.environmentDetails","type":"textbox","title":"Do you have a version of the application available for testers to access? If so, please provide details. Details can include a test URL, access information, etc."},{"fieldName":"details.testEnvironment.assets","icon":"question","description":"","id":"testEnvironment.assets","type":"textbox","title":"Are any test assets available? For exmaple: test plan, test scenario, test scripts, test data."},{"fieldName":"details.testEnvironment.otherInformation","icon":"question","description":"","id":"testEnvironment.other","type":"textbox","title":"Are there any other specific details related to the environment you can share?"}],"description":"","id":"testEnvironment","type":"questions","title":"Testing Enviroment","required":false},{"questions":[{"fieldName":"details.targetApplication.description","icon":"question","description":"Please describe your application.","id":"targetApplication.description","type":"textbox","title":""},{"fieldName":"details.targetApplication.platform","icon":"question","description":"Please list all platforms the application should be tested on.","id":"targetApplication.platform","type":"textbox","title":""},{"fieldName":"details.targetApplication.training","icon":"question","description":"","id":"targetApplication.training","type":"textbox","title":"Does the application require training to utilize it properly? If so, are you able to provide these inputs?"}],"description":"","id":"targetApplication","type":"questions","title":"Target Application","required":false},{"questions":[{"fieldName":"details.cyclePreferences.usabilitySuggestions","icon":"question","description":"Would you like usability suggestions included in the issue report?","id":"preferences.suggestions","type":"textbox","title":""},{"fieldName":"details.cyclePreferences.omissions","icon":"question","description":"Are there any types of defects you would like ommitted from issue reports?","id":"preferences.omissions","type":"textbox","title":""}],"description":"","id":"cyclePreferences","type":"questions","title":"Test Cycle Preferences","required":false},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer these additional questions to better help us understand your needs.","id":"testingNeeds","title":"Testing Needs","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-07-06T07:27:33.000Z","updatedAt":"2020-05-05T09:59:38.180Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":23,"name":"Performance Testing","productKey":"performance_testing","category":"generic","subCategory":"generic","icon":"product-qa-website-performance","brief":"Performance Testing","details":"Webpage rendering effiency, Load, Stress and Endurance Test","aliases":["performance-testing","performance_testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hidden":true,"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"In 160 or more characters tell us what is the app, main functions, problem area, etc..","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Please provide brief description of the system and/or application you would like to execute Performance Testing on."},{"fieldName":"details.loadDetails.concurrentUsersCount","hidden":true,"icon":"question","options":[{"title":"Up to 500","value":"upto-500"},{"title":"Up to 1000","value":"upto-1000"},{"title":"Up to 5000","value":"upto-5000"},{"title":"More than 5000","value":"above-5000"}],"description":"(Unit package includes 500 virtual users, additional load would require Top-Ups)","type":"slide-radiogroup","title":"What is the desired load on the system in terms of concurrent users for this test?","required":true,"validationError":"Please provide expected load"},{"fieldName":"details.loadDetails.businessProcessesCount","hidden":true,"icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 transactions, additional transactions would require Top-Ups)","type":"slide-radiogroup","title":"Approximately how many business processes/transactions will be included in your Performance Test?","required":true,"validationError":"Please provide expected number of business processes"},{"fieldName":"details.loadDetails.expectedExecutionHours","hidden":true,"icon":"question","options":[{"title":"Up to 5","value":"upto-5"},{"title":"Up to 10","value":"upto-10"},{"title":"Up to 25","value":"upto-25"},{"title":"More than 25","value":"above-25"}],"description":"(Unit package covers 10 hours of execution, additional execution time would require Top-Ups)","type":"slide-radiogroup","title":"How many hours do you expect the Performance Test to be executed for?","required":true,"validationError":"Please provide expected hours of execution"},{"fieldName":"details.testingNeeds.addons","icon":"question","options":[{"label":"Scenario Booster add 3 more","value":"scenario"},{"label":"Add 250 vUsers","value":"250vusers"},{"label":"Add 2500 vUsers","value":"2500vusers"},{"label":"Add additional Geography","value":"geo"},{"label":"Precurser to purchase - 1 Tool, 2 scripts,1 hour execution","value":"poc"},{"label":"Utilize consultant to tailor strategy","value":"strategy"},{"label":"Execution Booster extra 2 hours","value":"execution"},{"label":"Use my own testing tool","value":"mytool"},{"label":"Modify/Use own scripts","value":"myscripts"},{"label":"Late Entry - 1 week lead time","value":"late"}],"description":"","type":"checkbox-group","title":"Please select any additional add-ons.","required":false}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document—add a link in the notes section or upload it below.","id":"appDefinition","title":"Performance Testing","required":true},{"subSections":[{"questions":[{"fieldName":"details.spoc.business.name","icon":"question","description":"","type":"textbox","title":"Name of the Business SPOC","validationError":"Please provide name of business SPOC"},{"fieldName":"details.spoc.business.email","icon":"question","description":"","validationErrors":{"isEmail":"Please enter a valid email"},"validations":"isEmail","type":"textbox","title":"Email of the Business SPOC"},{"fieldName":"details.spoc.testing.name","icon":"question","description":"","type":"textbox","title":"Name of the Testing SPOC","validationError":"Please provide name of testing SPOC"},{"fieldName":"details.spoc.testing.email","icon":"question","description":"","validationErrors":{"isEmail":"Please enter a valid email"},"validations":"isEmail","type":"textbox","title":"Email of the Testing SPOC"},{"fieldName":"details.spoc.dev.name","icon":"question","description":"","type":"textbox","title":"Name of the development SPOC","validationError":"Please provide name of development SPOC"},{"fieldName":"details.spoc.dev.email","icon":"question","description":"","validationErrors":{"isEmail":"Please enter a valid email"},"validations":"isEmail","type":"textbox","title":"Email of the development SPOC"}],"description":"","id":"spoc","type":"questions","title":"SPOCs (Single Point of Contact)","required":false}],"description":"Please provide information on specific points of contacts.","id":"pocs","title":"Points of Contacts","required":false},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.targetApplication.architecture","description":"","id":"architecture","type":"textbox","title":"Briefly describe the architecture of the system. Please attach any architecture diagrams, design documents, and non-functional requirements in the Files section of this page."},{"fieldName":"details.targetApplication.developmentPlatform","icon":"question","options":[{"label":".NET","value":"dotnet"},{"label":"J2EE","value":"j2ee"},{"label":"Rich Internet Applications","value":"ria"},{"label":"Oracle Technology","value":"oracle"},{"label":"SAP","value":"sap"},{"label":"Mainframe","value":"mainframe"},{"label":"Adobe Flex","value":"adobe-flex"},{"label":"Others","value":"others"}],"description":"","id":"developmentPlatform","type":"checkbox-group","title":"What is the application development platform?"},{"fieldName":"details.targetApplication.frontEnd","icon":"question","options":[{"label":"Web Browser - Thin Client","value":"web-browser"},{"label":"Desktop App (Executable) - Thick Client","value":"desktop-app"},{"label":"Citrix based Desktop App (Executable)","value":"citrix"},{"label":"Java based (with Swing/Applets)","value":"java"},{"label":"Web based Oracle Forms","value":"oracle-forms"},{"label":"Any other","value":"other"}],"description":"","id":"frontEnd","type":"checkbox-group","title":"What is the front end of the system?"},{"fieldName":"details.targetApplication.webBrowsers","icon":"question","description":"(For eg. Webserver can be Apache, IIS etc.)","type":"textbox","title":"If applicable what web servers are used?"},{"fieldName":"details.targetApplication.appServers","icon":"question","description":"(For eg. Application server can be JBoss or Weblogic or Websphere etc.)","type":"textbox","title":"If applicable what application servers are used?"},{"fieldName":"details.targetApplication.backEnd","icon":"question","description":"(For eg. Back end can be Oracle, MS SQL or Sybase etc)","type":"textbox","title":"What data store technology is used?"},{"fieldName":"details.targetApplication.legacyBackEnd","icon":"question","description":"Mainframe(S390), AS400, Others","type":"textbox","title":"If the back end is a legacy system then specify the below"},{"fieldName":"details.targetApplication.middleware","icon":"question","description":"(For eg. Middleware can be MQSeries or TIBCO or Webmethod etc)","type":"textbox","title":"What middleware is used, if any?"},{"fieldName":"details.targetApplication.webservices","icon":"question","description":"(For eg. SOAP/REST Webservices deployed in App server for new customer creation and maintenance)","type":"textbox","title":"If your system uses web services, what architecture do they use? What functions do your web services perform?"},{"fieldName":"details.targetApplication.authMode","icon":"question","options":[{"label":"NTLM","value":"ntlm"},{"label":"Siteminder/SSO","value":"sso"},{"label":"LDAP","value":"ldap"},{"label":"Others","value":"others"}],"description":"","id":"targetApplication.authMode","type":"checkbox-group","title":"What is the authentication mode used by the application?"},{"fieldName":"details.targetApplication.interfaces","icon":"question","options":[{"label":"Vendor System","value":"vendor-system"},{"label":"Document Mgmt System","value":"document-mgmt-system"},{"label":"Payments","value":"payments"},{"label":"Others","value":"other"}],"description":"","id":"targetApplication.interfaces","type":"checkbox-group","title":"What interfaces does the application have?"}],"description":"","id":"questions","type":"questions","title":"Questions"}],"description":"Please provide the overview of the system to be tested","id":"systemOverview","title":"System Overview","required":false},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.perfTestEnv.missingCompSimulators","icon":"question","description":"","type":"textbox","title":"Are the simulators/stubs available in test environment for the components available and if so do they support concurrent request simulation?"},{"fieldName":"details.perfTestEnv.thirdPartyStubs","icon":"question","description":"","type":"textbox","title":"Will online interfaces/stubs for the payment systems, vendor systems etc. be available for performance testing?"},{"fieldName":"details.perfTestEnv.testDataAvailability","icon":"question","description":"","type":"textbox","title":"Please provide details on test data availability - A) Resident or master test data in DB e.g. Customers, products, locations etc. B) User specific data e.g. User Ids, email, credit card, order number etc. Who will support creating/importing/masking test data?"},{"fieldName":"details.perfTestEnv.soa","icon":"question","description":"","type":"textbox","title":"Please let us know if SOA based services need to be performance tested in a stand alone manner. If yes, please provide relevant details"},{"fieldName":"details.perfTestEnv.hostedOn","icon":"question","options":[{"label":"Physical servers","value":"physical-servers"},{"label":"Virtual/Cloud infrastructure","value":"cloud"}],"description":"Are the applications hosted on physical servers or virtual/cloud infrastructure","type":"radio-group","title":"Where are applications hosted?"},{"fieldName":"details.perfTestEnv.tools","icon":"question","description":"","type":"textbox","title":"Are performance testing tools available within your organization? (e.g. HP Loadrunner, Performance Center, Jmeter) If yes, has a PoC been conducted to validate the compatibility of these tools with the application to be tested? Will these be tools be made available in with required license for this performance test?"},{"fieldName":"details.perfTestEnv.diagnosticTools","icon":"question","description":"","type":"textbox","title":"Are performance diagnostic tools available within your organization? (e.g. Dynatrace, Yourkit, Profiler) If yes, has a PoC been conducted to validate compatibility ofthese tools with the applicationto be tested? Will these be tools be made available in with required license for this performance test?"},{"fieldName":"details.perfTestEnv.monitoring","icon":"question","description":"","type":"textbox","title":"How is application performance being monitored or planned to be monitored in production. Are same tools available in testing environment?"},{"fieldName":"details.perfTestEnv.saasAllowPortsOpening","icon":"question","description":"","type":"textbox","title":"In case of cloud based or SaaS performance testing tools, will your organization open necessary ports in any firewalls required to inject load on the application in a test environment?"}],"description":"","id":"perfTestEnvSec","type":"questions","title":"Questions"}],"description":"Please provide information on test environments.","id":"perfTestEnv","title":"Performance Test Environment"},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.prevDetails.time","icon":"question","description":"","type":"textbox","title":"When was the last time performance test carried out? On which version of application code base?"},{"fieldName":"details.prevDetails.reports","icon":"question","description":"","type":"textbox","title":"Please share the previous performance test reports if available by pasting here, or attaching in the Files section."},{"fieldName":"details.prevDetails.changes","icon":"question","description":"","type":"textbox","title":"What are the changes in application, architecture, infrastructure since the last test?"},{"fieldName":"details.prevDetails.typesOfTests","icon":"question","description":"","type":"textbox","title":"What different types of tests were carried out and which measurements were captured?"},{"fieldName":"details.prevDetails.monitoringTools","icon":"question","description":"","type":"textbox","title":"What were the performance testing and performance monitoring tools used?"},{"fieldName":"details.prevDetails.testScripts","icon":"question","description":"","type":"textbox","title":"Are the performance test scenarios and automated test scripts previously used still available?"},{"fieldName":"details.prevDetails.issues","icon":"question","description":"","type":"textbox","title":"Are there any open performance issues from previous tests?"},{"fieldName":"details.prevDetails.fixedIssues","icon":"question","description":"","type":"textbox","title":"Please detail any issues previously identified and resolved from previous performance tests."}],"description":"","id":"prevDetails","type":"questions","title":"Questions"}],"description":"Please provide information on specific points of contacts.","id":"previousDetails","title":"Previous Performance Test Details"}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-07-06T07:32:52.000Z","updatedAt":"2020-05-05T09:59:38.182Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":167,"name":"Marathon Match","productKey":"challenge-DEVELOP_MARATHON_MATCH","category":"generic","subCategory":"challenge","icon":"challenge-DEVELOP_MARATHON_MATCH","brief":"Marathon Match","details":"Marathon Match","aliases":["challenge-develop_marathon_match"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:02:24.000Z","updatedAt":"2020-05-05T09:59:38.198Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":9,"name":"caas-intake","productKey":"caas_intake","category":"generic","subCategory":"generic","icon":"product-app-app","brief":"CaaS","details":"CaaS","aliases":["caas-intake","caas","caas_intake"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief describe your application","validationErrors":{"isRequired":"Please describe your application.","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.resources.total","hidden":true,"icon":"question","description":"","type":"textbox","title":"How many full time resources do you need?","required":true,"validationError":"Please enter number of resources"},{"fieldName":"details.resources.months","hidden":true,"icon":"question","options":[{"title":"1","value":"1"},{"title":"2","value":"2"},{"title":"3","value":"3"},{"title":"4","value":"4"},{"title":"5","value":"5"},{"title":"6","value":"6"},{"title":"7","value":"7"},{"title":"8","value":"8"},{"title":"9","value":"9"},{"title":"10","value":"10"},{"title":"11","value":"11"},{"title":"12","value":"12"}],"description":"","type":"slide-radiogroup","title":"How many months do you need the resource for","required":true,"validationError":"Please select one"},{"fieldName":"details.resources.skills","hidden":true,"icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Data Science","value":"data-sci"},{"label":"Android","value":"android"},{"label":"java","value":"java"},{"label":".NET","value":"dotnet"},{"label":"NodeJS","value":"node"},{"label":"Javascript","value":"javascript"},{"label":"ReactJS","value":"react"},{"label":"AngularJS","value":"angular"}],"description":"","type":"checkbox-group","title":"What skills do you need?"},{"fieldName":"details.resources.hourlyrate","hidden":true,"icon":"question","options":[{"title":"Under $30","value":"under30"},{"title":"Under $60","value":"under60"},{"title":"Under $80","value":"under80"},{"title":"Under $100","value":"under100"},{"title":"Under $125","value":"under125"},{"title":"Under $150","value":"under150"},{"title":"Over $150","value":"over150"}],"description":"","type":"slide-radiogroup","title":"What is the typical hourly rate you are paying?"},{"fieldName":"details.resources.hourlyrate","hidden":true,"icon":"question","options":[{"title":"English","value":"english"},{"title":"Spanish","value":"spanish"},{"title":"German","value":"german"},{"title":"Japanese","value":"japanese"},{"title":"Other","value":"other"}],"description":"","type":"slide-radiogroup","title":"What language would you like to interact with the team?"},{"fieldName":"details.resources.tooling","hidden":true,"description":"Please List all project tools you normally interact with","type":"textbox","title":"Project Tools you utilize for interacting with developers"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please detail any other additional information. After completing this form, you'll be able to add additional information about your code base","id":"notes","type":"notes","title":"Additional Notes"}],"description":"Welcome to your own private Gig Crowd","id":"appDefinition","title":"caas-intake","required":true},{"subSections":[{"questions":[{"fieldName":"details.security.codeURL","icon":"question","description":"(if you prefer you can also upload your code below)","type":"textbox","title":"Please provide a URL to your code base repository"},{"fieldName":"details.security.additionalInfo","icon":"question","description":"","type":"textbox","title":"Please provide Topcoder with any additional information about accessing your code base"}],"description":"","id":"additional","type":"questions","title":"Codebase questions","required":false},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please provide us access to your codebase below or contact Topcoder through your dashboard.","id":"optionals","title":"Code base","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T14:23:13.000Z","updatedAt":"2020-05-05T09:59:38.205Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":171,"name":"Test Suites","productKey":"challenge-TEST_SUITES","category":"test-product-category","subCategory":"challenge","icon":"challenge-TEST_SUITES","brief":"Test Suites","details":"Test Suites","aliases":["challenge-test_suites"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:07:45.000Z","updatedAt":"2020-05-05T09:59:38.201Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":15,"name":"Visual Design","productKey":"visual_design_prod","category":"generic","subCategory":"generic","icon":"product-design-app-visual","brief":"1-15 screens","details":"Create development-ready designs","aliases":["visual-design","visual_design_prod"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","hidden":true,"affectsQuickQuote":true,"icon":"question","options":[{"iconOptions":{"number":"1-3"},"minTimeUp":0,"icon":"NumberText","title":"screens","value":"1-3","quoteUp":0,"maxTimeUp":0,"desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"minTimeUp":3,"icon":"NumberText","title":"screens","value":"4-8","quoteUp":2000,"maxTimeUp":5,"desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"minTimeUp":8,"icon":"NumberText","title":"screens","value":"9-15","quoteUp":3500,"maxTimeUp":12,"desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","type":"tiled-radio-group","title":"How many screens do you need designed?"},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"icon":"question","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Visual Design","required":true},{"subSections":[{"fieldName":"details.appScreens.screens","hideTitle":true,"questions":[{"fieldName":"name","icon":"question","description":"Describe your objectives for creating this application","validations":"isRequired","type":"textinput","title":"Screen name","required":true,"validationError":"Screen name cannot be blank"},{"fieldName":"description","icon":"question","description":"What are the important features/capabilities that the screen provides to your end users?","validations":"isRequired","type":"textbox","title":"What are the things the user can do on this screen?","required":true,"validationError":"Answer cannot be blank"},{"fieldName":"importanceLevel","icon":"question","options":[{"title":"1","value":1},{"title":"2","value":2},{"title":"3","value":3},{"title":"4","value":4},{"title":"5","value":5},{"title":"6","value":6},{"title":"7","value":7},{"title":"8","value":8},{"title":"9","value":9},{"title":"10","value":10}],"description":"Pick how important is this screen for your project from 1 to 10","type":"select-dropdown","title":"Screen importance","required":true}],"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"screens","type":"screens","title":"Screens","required":true}],"description":"Please describe all the primary screens first. It is important to think about the biggest problem of your application, rather than list all possible screens. Well documented and researched design patterns like \"Settings\", \"Search\", \"Listing\", \"Log In\", \"Registration\" do not need to be the focus of the design, unless you're doing something transformative with said screens. In that case please list in details what is the novel approach for your screens.","id":"appScreens","title":"App Screens","required":true},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.designSpecification.guidelines","description":"Do you have brand guidelines that need to be followed? If yes, please include a link or attach them in the definition section, above.","id":"guidelines","type":"textbox","title":"Guidelines"},{"fieldName":"details.designSpecification.examples","description":"Are there any apps or sites that have a look and feel that you would want used as inspiration? Please provide links or examples.","id":"examples","type":"textbox","title":"Examples"},{"fieldName":"details.designSpecification.excludeExamples","description":"On the other hand, are there any apps or sites that you dislike? Please provide links or examples.","id":"excludeExamples","type":"textbox","title":"Exclude Examples"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Guidelines","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-06-02T15:44:40.000Z","updatedAt":"2020-05-05T09:59:38.205Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":59,"name":"Dev/QA add-on 2","productKey":"generic-dev-qa-add-on-2","category":"generic","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-dev-qa-add-on-2"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:56.000Z","updatedAt":"2020-05-05T09:59:38.203Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":40,"name":"Visual Design","productKey":"visual_design_prod","category":"generic","subCategory":"generic","icon":"product-design-app-visual","brief":"1-15 screens","details":"Create development-ready designs","aliases":["visual-design","visual_design_prod"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","hidden":false,"affectsQuickQuote":true,"icon":"question","options":[{"iconOptions":{"number":"1-3"},"minTimeUp":0,"icon":"NumberText","title":"screens","value":"1-3","quoteUp":0,"maxTimeUp":0,"desc":"5-7 days"},{"iconOptions":{"number":"4-8"},"minTimeUp":3,"icon":"NumberText","title":"screens","value":"4-8","quoteUp":2000,"maxTimeUp":5,"desc":"7-10 days"},{"iconOptions":{"number":"9-15"},"minTimeUp":8,"icon":"NumberText","title":"screens","value":"9-15","quoteUp":3500,"maxTimeUp":12,"desc":"8-10 days"}],"description":"This is the most popular project size that can get a medium-sized app designed in a breeze","type":"tiled-radio-group","title":"How many screens do you need designed?"},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"Phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"Tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"Desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"Wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"icon":"question","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Infographic","required":true},{"subSections":[{"fieldName":"details.appScreens.screens","hideTitle":true,"questions":[{"fieldName":"name","icon":"question","description":"Describe your objectives for creating this application","validations":"isRequired","type":"textinput","title":"Screen name","required":true,"validationError":"Screen name cannot be blank"},{"fieldName":"description","icon":"question","description":"What are the important features/capabilities that the screen provides to your end users?","validations":"isRequired","type":"textbox","title":"What are the things the user can do on this screen?","required":true,"validationError":"Answer cannot be blank"},{"fieldName":"importanceLevel","icon":"question","options":[{"title":"1","value":1},{"title":"2","value":2},{"title":"3","value":3},{"title":"4","value":4},{"title":"5","value":5},{"title":"6","value":6},{"title":"7","value":7},{"title":"8","value":8},{"title":"9","value":9},{"title":"10","value":10}],"description":"Pick how important is this screen for your project from 1 to 10","type":"select-dropdown","title":"Screen importance","required":true}],"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"screens","type":"screens","title":"Screens","required":true}],"description":"Please describe all the primary screens first. It is important to think about the biggest problem of your application, rather than list all possible screens. Well documented and researched design patterns like \"Settings\", \"Search\", \"Listing\", \"Log In\", \"Registration\" do not need to be the focus of the design, unless you're doing something transformative with said screens. In that case please list in details what is the novel approach for your screens.","id":"appScreens","title":"App Screens","required":true},{"subSections":[{"hideTitle":true,"questions":[{"fieldName":"details.designSpecification.guidelines","description":"Do you have brand guidelines that need to be followed? If yes, please include a link or attach them in the definition section, above.","id":"guidelines","type":"textbox","title":"Guidelines"},{"fieldName":"details.designSpecification.examples","description":"Are there any apps or sites that have a look and feel that you would want used as inspiration? Please provide links or examples.","id":"examples","type":"textbox","title":"Examples"},{"fieldName":"details.designSpecification.excludeExamples","description":"On the other hand, are there any apps or sites that you dislike? Please provide links or examples.","id":"excludeExamples","type":"textbox","title":"Exclude Examples"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Guidelines","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-12-07T07:34:28.000Z","updatedAt":"2020-05-05T09:59:38.199Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":55,"name":"Additional form factor","productKey":"generic-design-add-on-1","category":"generic","subCategory":"test-no-id","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-design-add-on-1"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:07:46.000Z","updatedAt":"2020-05-05T09:59:38.202Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":166,"name":"Code","productKey":"challenge-CODE","category":"api_and_integrations","subCategory":"challenge","icon":"challenge-CODE","brief":"Code","details":"Code","aliases":["challenge-code"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:01:30.000Z","updatedAt":"2020-05-05T09:59:38.200Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":83,"name":"Third Party System Integration","productKey":"third-party-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"Third Party System Integration","details":"Integrate your application with an external 3rd party system.","aliases":["third-party-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:14:19.000Z","updatedAt":"2020-05-05T09:59:38.268Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":90,"name":"Automation Testing","productKey":"automation-testing","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"Automation Testing","details":"Automation Testing","aliases":["automation-testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:25:53.000Z","updatedAt":"2020-05-05T09:59:38.199Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":78,"name":"Admin Tool Development","productKey":"admin-tool-development","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Admin Tool Development","details":"Develop an administrative tool or panel to enable direct management of your application.","aliases":["admin-tool-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:10:04.000Z","updatedAt":"2020-05-05T09:59:38.269Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":170,"name":"Wireframes","productKey":"challenge-WIREFRAMES","category":"design","subCategory":"challenge","icon":"challenge-WIREFRAMES","brief":"Wireframes","details":"Wireframes","aliases":["challenge-wireframes"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:06:31.000Z","updatedAt":"2020-05-05T09:59:38.200Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":87,"name":"Checkmarx Security/Vulnerability Code Scanning","productKey":"checkmarx-scanning","category":"development","subCategory":"security","icon":"../../assets/icons/product-dev-integration.svg","brief":"Checkmarx Scanning","details":"Leverage Checkmarx’s standard security and code coverage report for an unlimited number of reports for up to 3 months.","aliases":["checkmarx-scanning"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:21:09.000Z","updatedAt":"2020-05-05T09:59:38.270Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":56,"name":"Zepplin app handoff","productKey":"generic-design-add-on-2","category":"generic","subCategory":"copydesign","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-design-add-on-2"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:16.000Z","updatedAt":"2020-05-05T09:59:38.202Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":91,"name":"Performance Testing Cycle","productKey":"performance-testing-cycle","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"Performance Testing Cycle","details":"Performance Testing Cycle","aliases":["performance-testing-cycle"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:26:39.000Z","updatedAt":"2020-05-05T09:59:38.271Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":58,"name":"Dev/QA add-on 1","productKey":"generic-dev-qa-add-on-1","category":"generic","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["generic-dev-qa-add-on-1"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:42.000Z","updatedAt":"2020-05-05T09:59:38.202Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":93,"name":"User Acceptance Testing Enhancements","productKey":"user-acceptance-testing-enhancements","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"User Acceptance Testing Enhancements","details":"User Acceptance Testing Enhancements","aliases":["user-acceptance-testing--enhancements"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:28:34.000Z","updatedAt":"2020-05-05T09:59:38.271Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":57,"name":"10-15 additional screens","productKey":"gtest-design-add-on-3","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["gtest-design-add-on-3"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:08:33.000Z","updatedAt":"2020-05-05T09:59:38.201Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":89,"name":"Continuous Integration / Continuous Deployment","productKey":"continuous-integration-deployment","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"CI/CD","details":"Engage with Topcoder using CI/CD processes to establish a development pipeline.","aliases":["continuous-integration-deployment"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:22:24.000Z","updatedAt":"2020-05-05T09:59:38.271Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":69,"name":"UI Prototype","productKey":"ui-prototype","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"UI Prototype","details":"You'll get to pick one form factor: desktop, tablet or mobile.","aliases":["ui-prototype"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:48:08.000Z","updatedAt":"2020-05-05T09:59:38.201Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":71,"name":"UX Testing With Maze","productKey":"ux-testing-with-maze","category":"design","subCategory":"testing","icon":"../../assets/icons/product-design-wireframes","brief":"UX Testing with Maze","details":"Test your application designs user experience with Topcoder’s partner, Maze. Maze will enable dozens of testers to test your application designs in under 24 hours and provide feedback on opportunities to optimize the user experience.","aliases":["ux-testing-with-maze"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:51:03.000Z","updatedAt":"2020-05-05T09:59:38.272Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":63,"name":"Dev/QA add-on 4 (non-generic)","productKey":"gtest-dev-qa-add-on-4","category":"test-product-category","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["gtest-dev-qa-add-on-4"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":true,"createdAt":"2019-01-23T09:26:14.000Z","updatedAt":"2020-05-05T09:59:38.200Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":168,"name":"Web Design","productKey":"challenge-WEB_DESIGNS","category":"design","subCategory":"challenge","icon":"challenge-WEB_DESIGNS","brief":"Web Design","details":"Web Design","aliases":["challenge-web_designs"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:03:29.000Z","updatedAt":"2020-05-05T09:59:38.202Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":169,"name":"Design First to Finish","productKey":"challenge-DESIGN_FIRST_2_FINISH","category":"design","subCategory":"challenge","icon":"challenge-DESIGN_FIRST_2_FINISH","brief":"Design First to Finish","details":"Design First to Finish","aliases":["challenge-design_first_2_finish"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2019-08-06T06:04:57.000Z","updatedAt":"2020-05-05T09:59:38.199Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":18,"name":"Real World Testing","productKey":"real_world_testing","category":"generic","subCategory":"generic","icon":"product-qa-crowd-testing","brief":"TBD","details":"Exploratory Testing, Cross browser-device Testing","aliases":["real-world-testing","real_world_testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.testType","hidden":true,"icon":"question","options":[{"iconOptions":{"filePath":"icon-test-unstructured","fill":"#00000"},"price":5012,"icon":"icon-test-unstructured","title":"Unstructured","value":"unstructured","desc":""},{"iconOptions":{"filePath":"icon-test-structured","fill":"#00000"},"price":8276,"icon":"icon-test-structured","title":"Structured","value":"structured","desc":""},{"iconOptions":{"filePath":"icon-dont-know","fill":"#00000"},"icon":"icon-dont-know","title":"Do not know","value":"dontKnow","desc":""}],"description":"Structured testing focuses on the execution of test cases, whereas unstructured testing lets the testers create their own path through an application as an end user might.","type":"tiled-radio-group","title":"What kind of crowd testing are you interested in?","required":true,"validationError":"Please let us know what kind of testing you would like to execute"},{"fieldName":"details.appDefinition.expectedHours","hidden":true,"icon":"question","options":[{"label":"Yes I have test cases.","value":"true"},{"label":"No I do not have test cases.","value":"false"}],"description":"Do you have test cases you would like executed? These are essential when running structured testing and optional for unstructured testing. If you are planning a structured test cycle and do not have test cases do not worry, we can help!","type":"radio-group","title":"Do you have test cases written?","required":true,"validationError":"Please let us know if you have test cases."},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.userInfo","hidden":true,"icon":"question","description":"Please share information about your end users. Where are they from? What is their goal? This information can help you find the best testers for your application.","type":"textbox","title":"Please tell us about your users."},{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information like requirements and/or test cases. After creating your project you will be able to upload files.","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Real World Testing","required":true},{"subSections":[{"questions":[{"fieldName":"details.testingNeeds.description","icon":"question","description":"","id":"testingNeeds.description","type":"textbox","title":"Please describe your website and/or application."},{"fieldName":"details.testingNeeds.inScope","icon":"question","description":"","id":"testingNeeds.inScope","type":"textbox","title":"Please describe which features or components are in-scope in this testing effort."},{"fieldName":"details.testingNeeds.outOfScope","icon":"question","description":"","id":"testingNeeds.outOfScope","type":"textbox","title":"Are any features or components out of scope? If yes, please describe."},{"fieldName":"details.testingNeeds.duration","icon":"question","description":"","id":"testingNeeds.duration","type":"textbox","title":"Do you have a specific timeline for testing? If so, please provide approximate start and end dates."}],"description":"","id":"scope","type":"questions","title":"Scope","required":false},{"questions":[{"fieldName":"details.testerDetails.demographics","icon":"question","description":"","id":"testerDetails.demographics","type":"textbox","title":"Do you have preferred demographics you would like to target?"},{"fieldName":"details.testerDetails.geographies","icon":"question","description":"","id":"testerDetails.geographies","type":"textbox","title":"Would you like to target any specific geographies?"},{"fieldName":"details.testerDetails.skills","icon":"question","description":"","id":"testerDetails.skills","type":"textbox","title":"Are any specific skills required to test your application? If so, please list them."}],"description":"","id":"testerDetails","type":"questions","title":"Tester Details","required":false},{"questions":[{"fieldName":"details.testEnvironment.environmentDetails","icon":"question","description":"","id":"testEnvironment.environmentDetails","type":"textbox","title":"Do you have a version of the application available for testers to access? If so, please provide details. Details can include a test URL, access information, etc."},{"fieldName":"details.testEnvironment.assets","icon":"question","description":"","id":"testEnvironment.assets","type":"textbox","title":"Are any test assets available? For exmaple: test plan, test scenario, test scripts, test data."},{"fieldName":"details.testEnvironment.otherInformation","icon":"question","description":"","id":"testEnvironment.other","type":"textbox","title":"Are there any other specific details related to the environment you can share?"}],"description":"","id":"testEnvironment","type":"questions","title":"Testing Enviroment","required":false},{"questions":[{"fieldName":"details.targetApplication.description","icon":"question","description":"","id":"targetApplication.description","type":"textbox","title":"Please describe your application."},{"fieldName":"details.targetApplication.platform","icon":"question","description":"","id":"targetApplication.platform","type":"textbox","title":"Please list all platforms the application should be tested on."},{"fieldName":"details.targetApplication.training","icon":"question","description":"","id":"targetApplication.training","type":"textbox","title":"Does the application require training to utilize it properly? If so, are you able to provide these inputs?"}],"description":"","id":"targetApplication","type":"questions","title":"Target Application","required":false},{"questions":[{"fieldName":"details.cyclePreferences.usabilitySuggestions","icon":"question","description":"","id":"preferences.suggestions","type":"textbox","title":"Would you like usability suggestions included in the issue report?"},{"fieldName":"details.cyclePreferences.omissions","icon":"question","description":"","id":"preferences.omissions","type":"textbox","title":"Are there any types of defects you would like ommitted from issue reports?"}],"description":"","id":"cyclePreferences","type":"questions","title":"Test Cycle Preferences","required":false},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer these additional questions to better help us understand your needs.","id":"testingNeeds","title":"Testing Needs","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-13T08:59:35.000Z","updatedAt":"2020-05-05T09:59:38.205Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":17,"name":"Other Design","productKey":"generic_design","category":"generic","subCategory":"generic--NEW","icon":"product-design-other","brief":"other designs","details":"Get help with other types of design","aliases":["generic-design","generic_design"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"fieldName":"description","hidden":true,"description":"Description","id":"projectInfo","type":"notes","title":"Project Info","required":true},{"questions":[{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Other Design","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-type-serif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-type-sans-serif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-icon-type-color-home","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-icon-type-outline-home","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tc-spec-icon-type-glyph-home","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T15:48:23.000Z","updatedAt":"2020-05-05T09:59:38.204Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":12,"name":"Computer Vision","productKey":"computer_vision","category":"generic","subCategory":"generic","icon":"product-qa-crowd-testing","brief":"TBD","details":"Work with images to recognize patterns, compute correspondences, etc","aliases":["computer-vision","computer_vision"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief Description of your objectives","validationErrors":{"isRequired":"Please provide your objectives","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Objectives"},{"fieldName":"details.vision.groundtruth","hidden":true,"icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","type":"radio-group","title":"Do you have ground truth defined?","required":true,"validationError":"Please select one"},{"fieldName":"details.vision.groundtruthDesc","hidden":true,"icon":"question","description":"(if applicable)","type":"textbox","title":"Describe your ground truth?","required":true,"validationError":"Please tell us about your ground truth"},{"fieldName":"details.vision.dataDesc","hidden":true,"icon":"question","description":"(if applicable)","type":"textbox","title":"Describe your data set","required":true,"validationError":"Please tell us about your data set"},{"fieldName":"details.vision.datasetSize","hidden":true,"icon":"question","description":"","type":"textbox","title":"Approximately how large is your data set in MB, GB, TB?","required":true,"validationError":"Please tell us the size of your data set"},{"fieldName":"details.vision.imageSet","hidden":true,"icon":"question","description":"","type":"textbox","title":"Approximately how many images are in your data set?","required":true,"validationError":"Please tell us roughly the number of images in your set"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please detail any other additional information","id":"notes","type":"notes","title":"Additional Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Computer Vision","required":true},{"subSections":[{"questions":[{"fieldName":"details.dataURL","icon":"question","description":"","type":"textbox","title":"Please provide a URL to your data"},{"fieldName":"details.performanceInfo","icon":"question","description":"","type":"textbox","title":"Please describe the performance of your existing software"},{"fieldName":"details.externalDataUsage","icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"Unsure","value":"Unsure"}],"description":"","type":"radio-group","title":"Do you anticipate allowing contestants to use external data?"},{"fieldName":"details.externalDataUsage","icon":"question","options":[{"label":"F1/Dice","value":"F1/Dice"},{"label":"Jaccard Index","value":"Jaccard Index"},{"label":"Harmonic Mean","value":"Harmonic Mean"}],"description":"","type":"checkbox-group","title":"If you have already thought of a scoring method, please indicate them here"},{"fieldName":"details.otherScoringInfo","icon":"question","description":"","type":"textbox","title":"If scoring method was other, please provide your approach"}],"description":"","id":"additional","type":"questions","title":"Additional Questions","required":false}],"description":"Please complete these optional questions.","id":"optionals","title":"Additional Questions","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T15:31:38.000Z","updatedAt":"2020-05-05T09:59:38.232Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":27,"name":"Development Iteration (3 Milestones)","productKey":"development-iteration-3-milestones","category":"development","subCategory":"app_dev","icon":"product-dev-other.svg","brief":"3 Milestones","details":"Development iteration with 3 milestones","aliases":["development-iteration-3-milestones","development_iteration_3_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Iteration (3 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-09T12:29:36.000Z","updatedAt":"2020-05-05T09:59:38.233Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":10,"name":"Watson Chatbot","productKey":"watson_chatbot","category":"generic","subCategory":"generic","icon":"product-chatbot-watson","brief":"Watson Chatbot","details":"Build Chatbot using IBM Watson","aliases":["watson_chatbot","watson-chatbot"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.hasBluemixAccount","hidden":true,"icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","type":"radio-group","title":"Do you have an existing IBM Cloud (formerly IBM Bluemix) account?","required":true},{"fieldName":"details.appDefinition.hasChatbot","hidden":true,"icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"","type":"radio-group","title":"Does your organization currently have a chatbot?","required":true},{"fieldName":"details.appDefinition.existingChatbotDesc","hidden":true,"icon":"question","description":"","type":"textbox","title":"If yes, can you provide some brief specifics about your current chatbot?"},{"fieldName":"details.appDefinition.capabilities","hidden":true,"icon":"question","options":[{"label":"Order Management","value":"order_management"},{"label":"Information","value":"information"},{"label":"Help","value":"help"},{"label":"Complaints","value":"complaints"},{"label":"Billing","value":"billing"},{"label":"Account Management","value":"account_management"},{"label":"Custom (please explain in the Notes)","value":"custom"}],"description":"","type":"checkbox-group","title":"What capabilities does the chatbot need to support?"},{"fieldName":"details.appDefinition.integrationSystems","hidden":true,"icon":"question","description":"","type":"textbox","title":"Will the chatbot need to access data from any systems to support the capabilities you listed above? If so, please list the systems below."},{"fieldName":"details.appDefinition.existingAgentScripts","hidden":true,"icon":"question","description":"","type":"textbox","title":"Do you have any example agent conversations you can provide? If so, please paste them or any links to documents below (you’ll be able to upload documents later)."},{"fieldName":"details.appDefinition.transferToHumanAgents","hidden":true,"icon":"question","description":"","type":"textbox","title":"Are you planning to transfer conversations to human agents? If so, please list the agents’ communication tools (e.g., Slack, LiveAgent, Intercom, etc.)."}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Watson Chatbot","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T15:26:29.000Z","updatedAt":"2020-05-05T09:59:38.234Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":20,"name":"Back-end & API","productKey":"api_dev","category":"generic","subCategory":"generic","icon":"../../assets/icons/product-dev-integration.svg","brief":"Back-end & API","details":"Build the server, DB, and API for your app","aliases":["api-development","api_dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Integration","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-21T12:32:47.000Z","updatedAt":"2020-05-05T09:59:38.232Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":28,"name":"Development Iteration (4 Milestones)","productKey":"development-iteration-4-milestones","category":"development","subCategory":"app_dev","icon":"product-dev-other.svg","brief":"4 Milestones","details":"Development iteration with 4 milestones","aliases":["development-iteration-4-milestones","development_iteration_4_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Iteration (4 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-08-09T12:30:14.000Z","updatedAt":"2020-05-05T09:59:38.232Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":60,"name":"Dev/QA add-on 3 (non-generic)","productKey":"gtest-dev-qa-add-on-3","category":"test-product-category","subCategory":"test-product-category","icon":"../../assets/icons/product-design-wireframes","brief":"brief","details":"details","aliases":["gtest-dev-qa-add-on-3"],"template":{},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2018-12-26T12:09:15.000Z","updatedAt":"2020-05-05T09:59:38.231Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":24,"name":"Salesforce Accelerator","productKey":"sfdc_testing","category":"generic","subCategory":"generic","icon":"product-qa-sfdc-accelerator","brief":"TBD","details":"SalesForce Testing, Cross browser-device Testing","aliases":["sfdc_testing","sfdc-testing"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name to your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief description of your project, Salesforce.com implementation testing objectives","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.components","hidden":true,"icon":"question","options":[{"label":"Manual Test packs + Business Models + Automation scripts","value":"pack_one"},{"label":"License for AssureNXT and Tosca for 2 months","value":"pack_two"},{"label":"Customization services to fit the pre-built assets to your specific use cases","value":"pack_three"}],"description":"Full solution will have all the above components, while Partial solution - can have just either the sfdc assets mentioned in option 1 OR SFDC assets + customized service without the license","type":"checkbox-group","title":"The Salesforce.com accelerator pack comprises of pre-built test assets and tools/licenses support to enable customization services. Would you like to purchase all the components of the accelerator pack or only a subset of it? (choose all that apply)","required":true,"validationError":"Please provide the required options"},{"fieldName":"details.appDefinition.functionalities","hidden":true,"icon":"question","options":[{"label":"Sales Cloud - Campaign","value":"sales_cloud_campaign"},{"label":"Lead","value":"lead"},{"label":"Account","value":"account"},{"label":"Contact","value":"contact"},{"label":"Opportunity","value":"opportunity"},{"label":"Quote","value":"quote"},{"label":"Contract & Order Management","value":"contract_and_order"},{"label":"Product & Price Book and End to End Processes & Misc Functions (Activites Chatter Reports & Dashboards)","value":"product_price"},{"label":"Service Cloud – Case Management","value":"service_cloud_case_management"}],"description":"","type":"checkbox-group","title":"Select the functionalities which are applicable for your Salesforce.com Implementation ( 1 or multiple from the 10 listed below)"},{"fieldName":"details.appDefinition.lightningExperience.value","hidden":true,"icon":"question","options":[{"label":"Yes","value":"Yes"},{"label":"No","value":"No"},{"label":"I Don't Know","value":"Neither"}],"description":"","type":"radio-group","title":"Are you using the Lightning Experience?","required":true}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Please enter any additional information such as any existing test automation tool used, known constraints for automation, % of customizations in your Salesforce.com implementation, etc.","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. *AssureNXT - Rapid Test Design Module is a Component of AssureNXT which is a Test Management Platform. It helps in Automated Test Case and Test Data Model generation through business process diagrams. RTD establishes direct relationship between business requirements, process flows and test coverage. Accelerated Test Case generation for changed business process. *Tosca - Tricentis Tosca is a testing tool that is used to automate end-to-end testing for software applications. Tricentis Tosca combines multiple aspects of software testing (test case design, test automation, test data design and generation, and analytics) to test GUIs and APIs from a business perspective","id":"appDefinition","title":"Salesforce Accelerator","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-07-06T07:37:46.000Z","updatedAt":"2020-05-05T09:59:38.233Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":26,"name":"Design Iteration (long)","productKey":"design-iteration-3-milestones","category":"design","subCategory":"visual_design","icon":"product-design-app-visual","brief":"3 Milestones","details":"Design work with checkpoint and final review","aliases":["design-iteration-3-milestones","design_iteration_3_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Design Iteration (3 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-08T14:56:42.000Z","updatedAt":"2020-05-05T09:59:38.234Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":19,"name":"Front-end","productKey":"frontend_dev","category":"test-product-category","subCategory":"test-product","icon":"../../assets/icons/product-dev-front-end-dev.svg","brief":"Front end development","details":"Translate your designs into Web or Mobile front-end","aliases":["frontend-development","frontend_dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineMobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineTablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineDesktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"IconTechOutlineWatchApple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Front-end","required":true},{"subSections":[{"questions":[{"fieldName":"details.designSpecification.fontStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSerif","title":"Serif","value":"serif","desc":"formal, old style"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecTypeSansSerif","title":"Sans Serif","value":"sanSerif","desc":"clean, modern, informal"}],"description":"The typography used in your designs will fit within these broad font styles","type":"tiled-radio-group","title":"What font style do you prefer? (Pick one)"},{"fieldName":"details.designSpecification.colors","defaultColors":[],"icon":"question","description":"Your preferred colors will be used to guide the shading in your designs","type":"colors","title":"What colors do you like? (Select all that apply)"},{"fieldName":"details.designSpecification.iconStyle","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeColorHome","title":"Flat Color","value":"flatColor","desc":"playful"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeOutlineHome","title":"Thin Line","value":"thinLine","desc":"modern"},{"iconOptions":{"fill":"#00000"},"icon":"IconTcSpecIconTypeGlyphHome","title":"Solid Line","value":"solidLine","desc":"classic"}],"description":"Icons within your designs will follow these styles","type":"tiled-radio-group","title":"What icon style do you prefer? (Pick one)"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.designSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define the visual style for your application or provide a style guide or brand guidelines. Skip this section (or particular questions) if you don't have any preferences or restrictions.","id":"designSpecification","title":"Design Specification","required":false},{"subSections":[{"questions":[{"fieldName":"details.devSpecification.platform","icon":"question","options":[{"label":"iOS","value":"ios"},{"label":"Android","value":"android"},{"label":"Web","value":"web"},{"label":"Hybrid","value":"hybrid"}],"description":"Choose the operating system/platform for your application","type":"checkbox-group","title":"How should your application be built?"},{"fieldName":"details.devSpecification.offlineAccess","icon":"question","options":[{"label":"Yes","value":"true"},{"label":"No","value":"false"}],"description":"Do your users need to use the application when they are unable to connect to the internet?","type":"radio-group","title":"Is offline access required for your application?"},{"fieldName":"details.devSpecification.securityLevel","icon":"question","options":[{"label":"Standard - Nothing to do here","value":"standard"},{"label":"Enhanced","value":"enhanced"},{"label":"Maximum","value":"maximumm"}],"description":"Do you expect to be storing or transmitting personal or sensitive information?","type":"radio-group","title":"What level of security is needed for your application?"}],"description":"","id":"questions","type":"questions","title":"Questions","required":false},{"fieldName":"details.devSpecification.notes","description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"notes","type":"notes","title":"Notes","required":false}],"description":"Define some basic technical requirements for your application or provide any architecture or technical guidelines. Skip this section if you dont know what is required.","id":"devSpecification","title":"Development Specification","required":false}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-21T12:27:49.000Z","updatedAt":"2020-05-05T09:59:38.257Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":160,"name":"Additional API Development","productKey":"additional-api-development","category":"api","subCategory":"api_and_integrations","icon":"api-development","brief":"Additional API Development","details":"Indicate the additional number of APIs you need developed","aliases":["additional-api-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-05-29T09:55:14.000Z","updatedAt":"2020-05-05T09:59:38.233Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":8,"name":"topgear-dev","productKey":"topgear_dev","category":"design","subCategory":"DESIGN","icon":"product-app-app","brief":"Topgear","details":"Topgear","aliases":["topgear-dev"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal.du","hidden":true,"icon":"question","description":"","type":"textbox","title":"DU"},{"fieldName":"details.appDefinition.users.projectCode","hidden":true,"icon":"question","type":"textbox","title":"Project Code"},{"fieldName":"details.appDefinition.users.cost_center","hidden":true,"icon":"question","type":"textbox","title":"Cost Center code"},{"fieldName":"details.appDefinition.users.ng3","hidden":true,"icon":"question","type":"textbox","title":"Part of NG3"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"topgear-dev","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-06-02T14:18:52.000Z","updatedAt":"2020-05-05T09:59:38.256Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":76,"name":"Backend Development","productKey":"backend-development","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Backend Development","details":"Commonly used to develop the backend of existing applications to support front-end enhancements.","aliases":["backend-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:08:02.000Z","updatedAt":"2020-05-05T09:59:38.258Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":79,"name":"Location Based Services","productKey":"location-based-services","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Location Based Services","details":"Support location-based features by tracking your users geographic location.","aliases":["location-based-services"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:10:46.000Z","updatedAt":"2020-05-05T09:59:38.258Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":72,"name":"API Development","productKey":"api-development","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"API Development","details":"Develop an API for your application.","aliases":["api-development"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:58:01.000Z","updatedAt":"2020-05-05T09:59:38.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":31,"name":"RUX Iteration","productKey":"rux-iteration","category":"design","subCategory":"visual_design","icon":"product-design-other","brief":"RUX Iteration","details":"RUX Iteration","aliases":["rux-iteration","rux_iteration"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"RUX Iteration","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-10T12:07:59.000Z","updatedAt":"2020-05-05T09:59:38.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":75,"name":"Email (SMTP Server) Setup","productKey":"smtp-server-setup","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Email (SMTP Server) Setup","details":"Develop a configured SMTP server to provide email notifications from your application.","aliases":["smtp-server-setup"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:07:08.000Z","updatedAt":"2020-05-05T09:59:38.259Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":77,"name":"Responsive Design Implementation","productKey":"resp-design-impl","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Responsive Design Implementation","details":"Implementation of Bootstrap, Material Design, Polymer or equivalent to support responsive design.","aliases":["resp-design-impl"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:08:50.000Z","updatedAt":"2020-05-05T09:59:38.258Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":161,"name":"Additional API Integrations","productKey":"additional-api-integration","category":"api","subCategory":"api_and_integrations","icon":"additional-api-integration","brief":"Additional API Integration","details":"Indicate the additional number of APIs you need integrated","aliases":["additional-api-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-05-29T09:57:52.000Z","updatedAt":"2020-05-05T09:59:38.260Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":84,"name":"SMS Gateway Integration","productKey":"sms-gateway-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"SMS Gateway Integration","details":"Integrate your application with an external SMS gateway provider.","aliases":["sms-gateway-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:14:54.000Z","updatedAt":"2020-05-05T09:59:38.258Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":25,"name":"Design Iteration (short)","productKey":"design-iteration-2-milestones","category":"design","subCategory":"visual_design","icon":"product-design-app-visual","brief":"2 Milestones","details":"Design work with final review","aliases":["design-iteration-2-milestones","design_iteration_2_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Design Iteration (2 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-08T14:50:21.000Z","updatedAt":"2020-05-05T09:59:38.262Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":73,"name":"Offline Capability","productKey":"offline-capability","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Offline Capability","details":"Enable users to use your application features offline and persist data locally so it can be synced with the server periodically.","aliases":["offline-capability"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:05:05.000Z","updatedAt":"2020-05-05T09:59:38.261Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":2,"name":"Wireframes","productKey":"wireframes","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"10-15 screens","details":"Plan and explore the navigation and structure of your app","aliases":["wireframes"],"template":{"sections":[{"subSections":[{"fieldName":"details.appScreens.screens","hideTitle":true,"questions":[{"fieldName":"name","icon":"question","description":"Describe your objectives for creating this application","validations":"isRequired","type":"textinput","title":"Screen name","required":true,"validationError":"Screen name cannot be blank"},{"fieldName":"description","icon":"question","description":"What are the important features/capabilities that the screen provides to your end users?","validations":"isRequired","type":"textbox","title":"What are the things the user can do on this screen?","required":true,"validationError":"Answer cannot be blank"},{"fieldName":"importanceLevel","icon":"question","options":[{"title":"1","value":1},{"title":"2","value":2},{"title":"3","value":3},{"title":"4","value":4},{"title":"5","value":5},{"title":"6","value":6},{"title":"7","value":7},{"title":"8","value":8},{"title":"9","value":9},{"title":"10","value":10}],"description":"Pick how important is this screen for your project from 1 to 10","type":"select-dropdown","title":"Screen importance","required":true}],"description":"Add any other important information regarding your project (e.g., links to documents or existing applications, budget or timing constraints)","id":"screens","type":"screens","title":"Screens","required":true}],"description":"Please describe all the primary screens first. It is important to think about the biggest problem of your application, rather than list all possible screens. Well documented and researched design patterns like \"Settings\", \"Search\", \"Listing\", \"Log In\", \"Registration\" do not need to be the focus of the design, unless you're doing something transformative with said screens. In that case please list in details what is the novel approach for your screens.","id":"appScreens","title":"App Screens","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-05-31T05:46:49.000Z","updatedAt":"2020-05-05T09:59:38.262Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":67,"name":"Design Direction","productKey":"design-direction","category":"design","subCategory":"ideation","icon":"../../assets/icons/product-design-wireframes","brief":"Ideation","details":"Let Topcoder set your design project up for success by first partnering to put-together requirements documentation, quick wireframes, user profiles, or sitemaps, which can be used by the Community to deliver the final designs you need.","aliases":["ideation"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:29:03.000Z","updatedAt":"2020-05-05T09:59:38.261Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":30,"name":"QA Iteration","productKey":"qa-iteration","category":"qa","subCategory":"quality_assurance","icon":"product-qa-crowd-testing","brief":"QA phase","details":"QA iteration","aliases":["qa-iteration","qa_iteration"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"QA Iteration","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-10T12:06:26.000Z","updatedAt":"2020-05-05T09:59:38.263Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":39,"name":"App","productKey":"application_development","category":"generic","subCategory":"generic","icon":"product-app-app","brief":"Apps","details":"Build apps for mobile, web, or wearables","aliases":["app","application_development"],"template":{"sections":[{"subSections":[{"fieldName":"name","hidden":true,"description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.primaryTarget","hidden":true,"icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-mobile","title":"Phone","value":"phone","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-tablet","title":"Tablet","value":"tablet","desc":"iOS, Android, Hybrid"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-desktop","title":"Desktop","value":"desktop","desc":"all OS"},{"iconOptions":{"fill":"#00000"},"icon":"icon-tech-outline-watch-apple","title":"Wearable","value":"wearable","desc":"Watch OS, Android Wear"}],"description":"Select only the device that you need to develop for. In most cases limiting the scope of your project would result in better final result. Topcoder recommends to always start with the mobile phone view and expand to other devices as your app matures.","type":"tiled-radio-group","title":"Which is your primary device target?"},{"fieldName":"description","hidden":true,"description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.goal","hidden":true,"icon":"question","description":"Describe your objectives for creating this application","type":"see-attached-textbox","title":"What is the goal of your application? How will people use it?"},{"fieldName":"details.appDefinition.users","hidden":true,"icon":"question","description":"Describe the roles and needs of your target users","type":"see-attached-textbox","title":"Who are the users of your application? "},{"fieldName":"details.appDefinition.budget","icon":"question","description":"Project budget in USD, please enter 0 if you don't have one","type":"numberinputpositive","title":"What is your project budget?"},{"fieldName":"details.appDefinition.budgetType","icon":"question","options":[{"title":"Its a wild guess","value":"guess"},{"title":"I have a rough idea","value":"ballpark"},{"title":"Precise to the penny","value":"exact"}],"description":"","type":"slide-radiogroup","title":"How precise is your budget?"},{"fieldName":"details.appDefinition.whenToStart","icon":"question","options":[{"title":"ASAP","value":"asap"},{"title":"1-2 months","value":"1-2 months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"When do you want to get started?"},{"fieldName":"details.appDefinition.deadline","icon":"question","options":[{"title":"2 weeks","value":"2-weeks"},{"title":"1-2 months","value":"1-2-months"},{"title":"2+ months","value":"2-plus-months"},{"title":"I'm just browsing","value":"estimating"}],"description":"","type":"slide-radiogroup","title":"Deadline"},{"fieldName":"details.appDefinition.features","icon":"question","description":"Please list all the features you would like in your application. You can use our wizard to pick from common features or define your own.","type":"see-attached-features","title":"Feature requirements"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.....","id":"appDefinition","title":"App","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2018-12-07T07:31:43.000Z","updatedAt":"2020-05-05T09:59:38.262Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":70,"name":"Responsive UI Prototype","productKey":"responsive-ui-prototype","category":"design","subCategory":"design","icon":"../../assets/icons/product-design-wireframes","brief":"Responsive UI Prototype","details":"Create a responsive HTML, CSS, and JavaScript UI prototype for your application that will render on desktops, tablets and mobile devices prior to creating production-ready designs to validate current requirements or identify gaps.","aliases":["responsive-ui-prototype"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:50:02.000Z","updatedAt":"2020-05-05T09:59:38.262Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":66,"name":"Zeplin Handoff","productKey":"zeplin-app-handoff","category":"design","subCategory":"deployment","icon":"../../assets/icons/product-design-wireframes","brief":"Zeplin App Handoff","details":"All downloadable and CSS design deliverables can be handed off using Zeplin, which will prepare them for development.","aliases":["zeplin-app-handoff"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T06:27:22.000Z","updatedAt":"2020-05-05T09:59:38.260Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":74,"name":"Minimal Battery Usage Implementation","productKey":"min-battery-use-impl","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Minimal Battery","details":"Optimize your application to use minimal network bandwidth and battery usage.","aliases":["min-battery-use-impl"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:06:28.000Z","updatedAt":"2020-05-05T09:59:38.263Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":29,"name":"Development Iteration (5 Milestones)","productKey":"development-iteration-5-milestones","category":"test-product-category","subCategory":"test13","icon":"product-dev-other.svg","brief":"5 Milestones","details":"Development iteration with 5 milestones","aliases":["development-iteration-5-milestones","development_iteration_5_milestones"],"template":{"sections":[{"subSections":[{"fieldName":"details.appDefinition.notes","hidden":true,"description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"},{"fieldName":"attachments","description":"","id":"files","type":"files","title":"Files","category":"product","required":false}],"description":"Please answer a few basic questions about your project. You can also provide the needed information in a supporting document--add a link in the notes section or upload it below.","id":"appDefinition","title":"Development Iteration (5 Milestones)","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":false,"createdAt":"2018-08-09T12:30:38.000Z","updatedAt":"2020-05-05T09:59:38.260Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":86,"name":"Mobile Enterprise Security Iteration","productKey":"mobile-enterprise-security","category":"development","subCategory":"security","icon":"../../assets/icons/product-dev-integration.svg","brief":"Mobile Enterprise Security Iteration","details":"Encrypt data on device and server, be able to remotely wipe a device cache, prevent decompiling of source code, etc. Requirements per project need to be specified.","aliases":["mobile-enterprise-security"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:16:48.000Z","updatedAt":"2020-05-05T09:59:38.257Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":80,"name":"Containerized Code","productKey":"containerized-code","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Containerized Code","details":"Containerization of the code base using Docker for easy and efficient deployment and maintenance.","aliases":["containerized-code"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:12:12.000Z","updatedAt":"2020-05-05T09:59:38.261Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":81,"name":"Google Analytics Implementation","productKey":"google-analytics-impl","category":"development","subCategory":"general_features","icon":"../../assets/icons/product-dev-integration.svg","brief":"Google Analytics Implementation","details":"Implement Google Analytics to track and monitor user interactions on your application.","aliases":["google-analytics-impl"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:12:52.000Z","updatedAt":"2020-05-05T09:59:38.267Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":85,"name":"Social Media Integration","productKey":"social-media-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"Social Media Integration","details":"Integrate your application with social media providers, such as Facebook, Instagram, Twitter, Google +, etc.","aliases":["social-media-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:15:29.000Z","updatedAt":"2020-05-05T09:59:38.266Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":82,"name":"SSO Integration","productKey":"sso-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"SSO Integration","details":"Integrate your application with your enterprise single sign-on capability.","aliases":["sso-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:13:35.000Z","updatedAt":"2020-05-05T09:59:38.267Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":92,"name":"Unit Tests","productKey":"unit-tests","category":"development","subCategory":"testing","icon":"product-qa-crowd-testing","brief":"Unit Tests","details":"Unit Tests","aliases":["unit-tests"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:27:13.000Z","updatedAt":"2020-05-05T09:59:38.270Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":88,"name":"Blackduck License scanning","productKey":"blackduck-scanning","category":"development","subCategory":"security","icon":"../../assets/icons/product-dev-integration.svg","brief":"Blackduck License scanning","details":"Leverage Blackduck’s open-sourced compliance report for an unlimited number of reports for up to 3 months.","aliases":["blackduck-scanning"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-04T07:21:45.000Z","updatedAt":"2020-05-05T09:59:38.268Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":94,"name":"API Integration","productKey":"api-integration","category":"development","subCategory":"api_and_integrations","icon":"../../assets/icons/product-dev-integration.svg","brief":"API Integration","details":"Integrate an API to your application.","aliases":["api-integration"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","type":"project-name","title":"Project Name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","description":"Brief Description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"id":"projectInfo","validations":"isRequired,minLength:160","type":"textbox","title":"Description"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","type":"radio-group","title":"What type of question you want to see next?","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","type":"tiled-radio-group","title":"Sample tiled radio group question?","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","type":"checkbox-group","title":"Sample Checkbox group type question"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","type":"slide-radiogroup","title":"Sample Slide Radio Group type question","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","type":"questions","title":"Questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","type":"notes","title":"Notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":false,"isAddOn":true,"createdAt":"2019-03-05T10:39:20.000Z","updatedAt":"2020-05-05T09:59:38.268Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":174,"name":"For demo milestones","productKey":"demo-milestones-holder","category":"generic","subCategory":"generic","icon":"demo","brief":"demo","details":"As have many Milestone Templates which pollute other products, we can assign all unnecessary Milestone Templates here.","aliases":["demo-milestones-holder"],"template":{"sections":[{"subSections":[{"fieldName":"name","description":"","id":"projectName","title":"Project Name","type":"project-name","required":true,"validationError":"Please provide a name for your project"},{"hideTitle":true,"questions":[{"fieldName":"description","validationErrors":{"isRequired":"Please provide a description","minLength":"Please enter at least 160 characters"},"description":"Brief Description","id":"projectInfo","validations":"isRequired,minLength:160","title":"Description","type":"textbox"},{"fieldName":"details.appDefinition.questionType","icon":"question","options":[{"label":"Checkbox Group","value":"checkbox-group"},{"label":"Slide Radio Group","value":"slide-radiogroup"},{"label":"Tiled Radio Group","value":"tiled-radio-group"}],"description":"Description for the radio button type question","title":"What type of question you want to see next?","type":"radio-group","required":true,"validationError":"Please let us know consumers of your application"},{"condition":"details.appDefinition.questionType == 'tiled-radio-group'","fieldName":"details.appDefinition.sampleTiledRadioGroup","icon":"question","options":[{"iconOptions":{"fill":"#00000"},"icon":"icon-test-unstructured","title":"Value 1","value":"value1","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-test-structured","title":"Value 2","value":"value2","desc":""},{"iconOptions":{"fill":"#00000"},"icon":"icon-dont-know","title":"Value 3","value":"value3","desc":""}],"description":"Description for tiled radio group question","title":"Sample tiled radio group question?","type":"tiled-radio-group","required":true,"validationError":"Validation error for tiled radio group question"},{"condition":"details.appDefinition.questionType == 'checkbox-group'","fieldName":"details.appDefinition.sampleCheckboxGroup","icon":"question","options":[{"label":"Value 1","value":"value1"},{"label":"Value 2","value":"value2"}],"description":"Description for checkbox group type question","title":"Sample Checkbox group type question","type":"checkbox-group"},{"condition":"details.appDefinition.questionType == 'slide-radiogroup'","fieldName":"details.appDefinition.sampleSlideRadioGroup","icon":"question","options":[{"title":"Under $25K ","value":"upto-25"},{"title":"$25K to $50K","value":"upto-50"},{"title":"$50K to $75K","value":"upto-75"},{"title":"$75K to $100K","value":"upto-100"},{"title":"More than $100K","value":"above-100"}],"description":"How much budget do you have?","title":"Sample Slide Radio Group type question","type":"slide-radiogroup","required":true,"validationError":"Please provide value for sample radio group question"}],"description":"","id":"questions","title":"Questions","type":"questions","required":true},{"fieldName":"details.appDefinition.notes","description":"Add any other important information regarding your project (e.g. links to documents or existing applications)","id":"notes","title":"Notes","type":"notes"}],"description":"Please answer a few basic questions about your project and, as an option, add links to supporting documents in the “Notes” section. If you have any files to upload, you’ll be able to do so later.","id":"appDefinition","title":"Sample Project","required":true}]},"form":null,"deletedAt":null,"disabled":false,"hidden":true,"isAddOn":false,"createdAt":"2020-05-04T12:00:04.484Z","updatedAt":"2020-05-05T09:59:38.269Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"ProjectType":[{"key":"analytics-and-data-science","displayName":"Analytics & Data Science","icon":"product-analytics-computer-vision","question":"lorem","info":"Get cutting-edge solutions from the best minds in data and analytics","aliases":["analytics-and-data-science"],"disabled":false,"hidden":false,"metadata":{},"deletedAt":null,"createdAt":"2020-01-11T04:22:03.150Z","updatedAt":"2020-05-05T09:59:36.858Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"chatbot","displayName":"Chatbot","icon":"product-cat-chatbot","question":"What do you want to develop?","info":"Build, train and test a custom conversation for your chatbot","aliases":["all-chatbots"],"disabled":true,"hidden":true,"metadata":{"name":"tom","id":2},"deletedAt":null,"createdAt":"2018-06-06T10:02:34.000Z","updatedAt":"2020-05-05T09:59:36.859Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app-test","displayName":"App Test","icon":"product-cat-app","question":"What do you want to develop?","info":"Build a phone, tablet, wearable, or desktop app","aliases":["application_development","app"],"disabled":false,"hidden":true,"metadata":{"a":1,"info":{"c":23,"age":3}},"deletedAt":null,"createdAt":"2019-01-23T09:26:42.000Z","updatedAt":"2020-05-05T09:59:36.858Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app_dev","displayName":"Application Development","icon":"prod-cat-app-icon","question":"What kind of devlopment you need?","info":"Application Development Info","aliases":["key-1","key_1"],"disabled":true,"hidden":true,"metadata":{"slack-notification-mappings":{"color":"#96d957","label":"Full App"}},"deletedAt":null,"createdAt":"2020-05-04T10:06:57.473Z","updatedAt":"2020-05-05T09:59:36.859Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"website","displayName":"Website","icon":"product-cat-website","question":"What do you want to develop?","info":"Design and build the high-impact pages for your blog, online store, or company","aliases":["all-websites"],"disabled":false,"hidden":true,"metadata":{"a":1,"job":{"title":"SAD"}},"deletedAt":null,"createdAt":"2018-06-06T10:02:25.000Z","updatedAt":"2020-05-05T09:59:36.869Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"test-no-id","displayName":"test-no-id","icon":"test-no-id","question":"test-no-id","info":"test-no-id","aliases":["test-no-id"],"disabled":true,"hidden":true,"metadata":{},"deletedAt":null,"createdAt":"2019-01-24T12:19:47.000Z","updatedAt":"2020-05-05T09:59:36.869Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app-test-2","displayName":"app-test-2","icon":"app-test-2","question":"app-test-1","info":"app-test-1","aliases":["app-test-1"],"disabled":false,"hidden":true,"metadata":{},"deletedAt":null,"createdAt":"2019-10-07T04:36:20.000Z","updatedAt":"2020-05-05T09:59:36.876Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"wireframes","displayName":"Design","icon":"t","question":"What kind of design do you need?","info":"Pick the right design project for your needs - wireframes, visual, or other","aliases":["t","b","c"],"disabled":true,"hidden":false,"metadata":{},"deletedAt":null,"createdAt":"2018-12-10T12:22:17.000Z","updatedAt":"2020-05-05T09:59:36.877Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"scoped-solutions","displayName":"Solutions","icon":"solutions","question":"Select your solution","info":"Explore Topcoder's application, website, quality assurance, and data science solutions here.","aliases":["scoped-solutions"],"disabled":false,"hidden":false,"metadata":{"cardButtonText":"View Solutions","pageInfo":"We’ve got you covered across a wide-variety of disciplines","pageHeader":"Topcoder Solutions"},"deletedAt":null,"createdAt":"2019-05-30T06:35:38.000Z","updatedAt":"2020-05-05T09:59:36.877Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"quality_assurance","displayName":"Quality Assurance","icon":"product-cat-qa","question":"What kind of quality assurance (QA) do you need?","info":"Find the bugs in your software","aliases":["all-quality-assurance"],"disabled":false,"hidden":false,"metadata":{"key":2},"deletedAt":null,"createdAt":"2018-06-06T10:03:19.000Z","updatedAt":"2020-05-05T09:59:36.877Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app","displayName":"App","icon":"product-cat-app","question":"What do you want to develop?","info":"Build a phone, tablet, wearable, or desktop app","aliases":["application_development","app"],"disabled":false,"hidden":false,"metadata":{"a":1,"info":{"c":23,"age":3}},"deletedAt":null,"createdAt":"2018-06-06T10:02:13.000Z","updatedAt":"2020-05-05T09:59:36.878Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"talent-as-a-service","displayName":"Talent as a Service","icon":"on-demand","question":"What do you want to develop?","info":"Engage top talent from Topcoder's proven community to deliver for a flat weekly fee. High performing resources are assigned to your team based on their qualitive results on the Topcoder platform.","aliases":["taas-offerings"],"disabled":false,"hidden":false,"metadata":{"filterable":false,"cardButtonText":"Tap Into Top Talent","pageInfo":"Create a private on-demand team","pageHeader":"Engage Talent","autoProceedToSingleProjectTemplate":false},"deletedAt":null,"createdAt":"2020-01-31T09:58:33.815Z","updatedAt":"2020-05-05T09:59:36.890Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"applications-and-websites","displayName":"Applications & Websites","icon":"product-app-app","question":"lorem","info":"Create something great with Topcoder.","aliases":["applications-and-websites"],"disabled":false,"hidden":false,"metadata":{},"deletedAt":null,"createdAt":"2020-01-11T04:32:49.447Z","updatedAt":"2020-05-05T09:59:36.878Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"unscoped-solutions","displayName":"On Demand","icon":"product-cat-app","question":"What do you want to develop?","info":"Have a variety of work you need to accomplish? Consider purchasing budget capacity or engaging a long-term talent pool with high-demand skillsets, where you determine what items of work the crowd can help you with. Learn more here.","aliases":["unscoped-solutions"],"disabled":false,"hidden":true,"metadata":{"filterable":false,"pageInfo":"Lorem ipsum dolor sit amet 1","pageHeader":"Select Budget or Talent Projects"},"deletedAt":null,"createdAt":"2019-05-30T06:37:49.000Z","updatedAt":"2020-05-05T09:59:36.890Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"ProductCategory":[{"key":"security","displayName":"Security","icon":"security","question":"Security","info":"Security","aliases":["security"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:53:49.000Z","updatedAt":"2020-05-05T09:59:36.965Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"integrations","displayName":"Integrations","icon":"integrations","question":"Integrations","info":"Integrations","aliases":["integrations"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:53:23.000Z","updatedAt":"2020-05-05T09:59:36.964Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"challenge","displayName":"Challenge","icon":"challenge","question":"challenge","info":"challenge","aliases":["challenge"],"disabled":false,"hidden":true,"deletedAt":null,"createdAt":"2019-08-06T05:36:44.000Z","updatedAt":"2020-05-05T09:59:36.965Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"quality_assurance_new","displayName":"QA New","icon":"product-cat-qa","question":"What kind of development do you need?","info":"Test and fix bugs in your software","aliases":["all-quality-assurance"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-12-14T11:06:00.000Z","updatedAt":"2020-05-05T09:59:36.964Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"deployment","displayName":"Design Deployment","icon":"Deployment","question":"What type of deployment you want?","info":"What type of deployment you want?","aliases":["deployment"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:24:09.000Z","updatedAt":"2020-05-05T09:59:36.965Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"test-product-category","displayName":"Test product Category","icon":"prouct","question":"what","info":"wy","aliases":["test-product-category"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2018-12-31T12:07:19.000Z","updatedAt":"2020-05-05T09:59:36.972Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"generic","displayName":"GENERIC","icon":"icon-edit","question":"question","info":"info","aliases":["fd","e","a a","b"],"disabled":true,"hidden":true,"deletedAt":null,"createdAt":"2018-12-06T12:51:19.000Z","updatedAt":"2020-05-05T09:59:36.972Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"testing","displayName":"Design Testing","icon":"Testing","question":"Testing","info":"Testing","aliases":["testing"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:52:00.000Z","updatedAt":"2020-05-05T09:59:36.980Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"qa","displayName":"QA","icon":"QA","question":"What do you want to get QA for?","info":"What do you want to get QA for?","aliases":["qa","quality-assurance"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:23:38.000Z","updatedAt":"2020-05-05T09:59:36.979Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"general_features","displayName":"General Features","icon":"general_features","question":"general_features","info":"general_features","aliases":["general_features"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-04-17T10:41:15.000Z","updatedAt":"2020-05-05T09:59:36.980Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"ideation","displayName":"Design Ideation Consultation","icon":"Ideation","question":"Ideation","info":"Ideation","aliases":["ideation"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:28:17.000Z","updatedAt":"2020-05-05T09:59:36.979Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"app_dev","displayName":"Application Development","icon":"prod-cat-app-icon","question":"What kind of devlopment you need?","info":"Application Development Info","aliases":["key-1","key_1"],"disabled":true,"hidden":true,"deletedAt":null,"createdAt":"2020-05-04T10:04:32.429Z","updatedAt":"2020-05-05T09:59:36.979Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"development","displayName":"Development","icon":"Development","question":"What do you want to develop?","info":"What do you want to develop?","aliases":["development"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:22:57.000Z","updatedAt":"2020-05-05T09:59:36.980Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"api_and_integrations","displayName":"API & Integrations","icon":"API","question":"API & Integrations","info":"API & Integrations","aliases":["API & Integrations"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-04-17T10:34:59.000Z","updatedAt":"2020-05-05T09:59:36.978Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"api","displayName":"API","icon":"API","question":"API","info":"API","aliases":["api"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:52:44.000Z","updatedAt":"2020-05-05T09:59:36.978Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"key":"design","displayName":"Design","icon":"test","question":"Who","info":"what","aliases":["design"],"disabled":false,"hidden":false,"deletedAt":null,"createdAt":"2019-03-04T06:21:51.000Z","updatedAt":"2020-05-05T09:59:36.980Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"MilestoneTemplate":[{"id":93,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":7,"type":"generic-work","order":12,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:31.000Z","updatedAt":"2020-05-05T09:59:40.810Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":43,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":7,"type":"generic-work","order":14,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:17:47.000Z","updatedAt":"2020-05-05T09:59:40.810Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":27,"name":"Report 1","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":8,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:47:16.000Z","updatedAt":"2020-05-05T09:59:39.009Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":14,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":8,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T15:02:48.000Z","updatedAt":"2020-05-05T09:59:40.358Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":24,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":3,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:35:56.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":33,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":9,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:50:21.000Z","updatedAt":"2020-05-05T09:59:39.228Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":40,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":15,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:59:43.000Z","updatedAt":"2020-05-05T09:59:41.074Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":23,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":2,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:33:21.000Z","updatedAt":"2020-05-05T09:59:39.003Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":35,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":10,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:50:43.000Z","updatedAt":"2020-05-05T09:59:41.074Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":25,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":7,"type":"phase-specification","order":3,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:36:02.000Z","updatedAt":"2020-05-05T09:59:40.744Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":126,"name":"Final Fix","description":"dummy description","duration":1,"type":"final-fix","order":14,"plannedText":"dummy plannedText","activeText":"dummy activeText","completedText":"Below is the list of final fixes which are being implemented. Keep tracking delivery milestone for updates.","blockedText":"dummy blockText","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:53.000Z","updatedAt":"2020-05-05T09:59:40.159Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":41,"name":"Timeline start (QA)","description":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":6,"plannedText":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. Development is underway.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:12:53.000Z","updatedAt":"2020-05-05T09:59:40.810Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":16,"name":"Design Review","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"checkpoint-review","order":20,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently developing the 5 options you selected into final designs.","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T16:08:43.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":122,"name":"COPY Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":12,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:50.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":36,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":10,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":27,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:59:03.000Z","updatedAt":"2020-05-05T09:59:39.364Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":52,"name":"Adding Links","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"add-links","order":28,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"ddfd","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"df","hidden":true,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:50:34.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":125,"name":"test","description":"dummy description","duration":5,"type":"checkpoint-review","order":6,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:52.000Z","updatedAt":"2020-05-05T09:59:40.018Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":20,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":22,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:22:05.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":34,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":19,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:50:33.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":78,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":12,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"hh","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-12-08T10:19:41.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":45,"name":"Timeline start (design)","description":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","duration":1,"type":"phase-specification","order":3,"plannedText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:30:02.000Z","updatedAt":"2020-05-05T09:59:39.456Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":48,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":13,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:37:02.000Z","updatedAt":"2020-05-05T09:59:40.960Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":49,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":13,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:47:28.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":89,"name":"Checkpoint Review","description":"dummy description","duration":5,"type":"checkpoint-review","order":9,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:28.000Z","updatedAt":"2020-05-05T09:59:40.159Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":50,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":12,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:48:44.000Z","updatedAt":"2020-05-05T09:59:40.358Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":129,"name":"Phase Specification","description":"dummy description","duration":5,"type":"phase-specification","order":1,"plannedText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","activeText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","completedText":"Great job! We're ready to roll. Work on this project phase will begin shortly.","blockedText":"dummy blockedText","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:55.000Z","updatedAt":"2020-05-05T09:59:39.622Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":30,"name":"Report","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":10,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:48:35.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":39,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":18,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T11:59:38.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":104,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":7,"type":"phase-specification","order":1,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:38.000Z","updatedAt":"2020-05-05T09:59:40.735Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":10,"name":"Final Fix","description":"dummy description","duration":1,"type":"final-fix","order":13,"plannedText":"dummy plannedText","activeText":"dummy activeText","completedText":"Below is the list of final fixes which are being implemented. Keep tracking delivery milestone for updates.","blockedText":"dummy blockText","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-07-22T04:06:21.000Z","updatedAt":"2020-05-05T09:59:40.159Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":102,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":11,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:37.000Z","updatedAt":"2020-05-05T09:59:41.074Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":112,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":11,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:43.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":137,"name":"Design Work (final)","description":"We will take into account your feedback to create the best final versions of designs.","duration":7,"type":"design-work","order":3,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":" ","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":" ","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T05:52:29.000Z","updatedAt":"2020-05-05T09:59:40.770Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":106,"name":"Delivery (QA)","description":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery","order":5,"plannedText":"Once you accept the work, your QA report files will be delivered here.","activeText":"Once you accept the work, your QA report files will be delivered here.","completedText":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the work, your QA report files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:40.000Z","updatedAt":"2020-05-05T09:59:40.802Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":42,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":14,"type":"generic-work","order":7,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:14:45.000Z","updatedAt":"2020-05-05T09:59:40.810Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":81,"name":"test","description":"dummy description","duration":5,"type":"checkpoint-review","order":5,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-12-10T12:00:06.000Z","updatedAt":"2020-05-05T09:59:40.011Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":44,"name":"Delivery (QA)","description":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery","order":10,"plannedText":"Once you accept the work, your QA report files will be delivered here.","activeText":"Once you accept the work, your QA report files will be delivered here.","completedText":"QA has been completed! This marks the end of the milestone. Below you'll find the QA report files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the work, your QA report files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:23:52.000Z","updatedAt":"2020-05-05T09:59:40.810Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":79,"name":"Delivery111","description":"dummy description","duration":51,"type":"delivery-design","order":61,"plannedText":"Once we implement the final designs, your source files will be delivered here.","activeText":"Please indicate the top 3 things you'd like to change on the winning design. Any further changes will be out of the scope of this phase and will require you to extend the project by adding an additional phase.","completedText":"The final file deliverables are attached. This concludes both the milestone and the entire phase. We've added all the source files as per the phase specification. They'll also be permanently available for download at your convenience.","blockedText":"The agreed-upon final fixes are being implemented. We will provide an update once the progress bar reaches 100% and attach the final deliverables below.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-12-10T08:06:34.000Z","updatedAt":"2020-05-05T09:59:40.159Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":132,"name":"Progress report (QA)","description":"We will be reviewing and testing the code for quality and bugs.","duration":14,"type":"generic-work","order":3,"plannedText":"We will be reviewing and testing the code for quality and bugs.","activeText":"QA testing is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Your QA testing has been completed. You've reached the end of this milestone.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:56.000Z","updatedAt":"2020-05-05T09:59:40.531Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":133,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":7,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"hh","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:57.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":51,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":33,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T13:49:40.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":22,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":24,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:25:40.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":90,"name":"Final Designs","description":"dummy description","duration":5,"type":"final-designs","order":8,"plannedText":"We will design the remaining screens with the feedback from the 5 designs you selected. Once the designs are completed, you will see them here. You'll then choose your 3 favorite options.","activeText":"Our designers are hard at work, incorporating your feedback and designing the remaining screens. We will update this milestone once the progress bar reaches 100%, and you'll see all the links available below.","completedText":"You've selected the winning designs! This concludes the final design milestone.","blockedText":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:29.000Z","updatedAt":"2020-05-05T09:59:40.154Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":9,"name":"Final Designs","description":"dummy description","duration":5,"type":"final-designs","order":12,"plannedText":"We will design the remaining screens with the feedback from the 5 designs you selected. Once the designs are completed, you will see them here. You'll then choose your 3 favorite options.","activeText":"Our designers are hard at work, incorporating your feedback and designing the remaining screens. We will update this milestone once the progress bar reaches 100%, and you'll see all the links available below.","completedText":"You've selected the winning designs! This concludes the final design milestone.","blockedText":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-07-22T04:02:22.000Z","updatedAt":"2020-05-05T09:59:40.159Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":4,"name":"Checkpoint Review","description":"dummy description","duration":5,"type":"checkpoint-review","order":17,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2018-07-17T03:10:08.000Z","updatedAt":"2020-05-05T09:59:40.159Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":96,"name":"Delivery111","description":"dummy description","duration":51,"type":"delivery-design","order":64,"plannedText":"Once we implement the final designs, your source files will be delivered here.","activeText":"Please indicate the top 3 things you'd like to change on the winning design. Any further changes will be out of the scope of this phase and will require you to extend the project by adding an additional phase.","completedText":"The final file deliverables are attached. This concludes both the milestone and the entire phase. We've added all the source files as per the phase specification. They'll also be permanently available for download at your convenience.","blockedText":"The agreed-upon final fixes are being implemented. We will provide an update once the progress bar reaches 100% and attach the final deliverables below.","hidden":true,"reference":"productTemplate","referenceId":15,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:33.000Z","updatedAt":"2020-05-05T09:59:40.159Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":135,"name":"Design Work (checkpoint)","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"design-work","order":1,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":" ","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":" ","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T04:45:51.000Z","updatedAt":"2020-05-05T09:59:40.192Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":107,"name":"Report","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":5,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:40.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":15,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":26,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"Design develoment is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T16:05:32.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":92,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":1,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:30.000Z","updatedAt":"2020-05-05T09:59:40.323Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":95,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":6,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:32.000Z","updatedAt":"2020-05-05T09:59:40.351Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":120,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":11,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:49.000Z","updatedAt":"2020-05-05T09:59:40.358Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":103,"name":"Design Review","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"checkpoint-review","order":15,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently developing the 5 options you selected into final designs.","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:38.000Z","updatedAt":"2020-05-05T09:59:40.358Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":121,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":16,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"Design develoment is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:49.000Z","updatedAt":"2020-05-05T09:59:40.358Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":77,"name":"COPY Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":17,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2018-12-08T10:13:46.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":128,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":9,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:54.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":130,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":11,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:55.000Z","updatedAt":"2020-05-05T09:59:40.670Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":88,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":19,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:28.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":99,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":3,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:35.000Z","updatedAt":"2020-05-05T09:59:41.329Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":136,"name":"Checkpoint Review","description":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","duration":5,"type":"checkpoint-review","order":2,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from. From there, you will have to select the 5 best proposals from which to develop the final designs.","activeText":"We're currently developing the various proposals. We will soon update this milestone with a list of all the design proposals.","completedText":"We're currently developing the 5 options you selected into final designs.","blockedText":"Select the 5 designs that you would like us to continue exploring going forward. Please leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T05:49:48.000Z","updatedAt":"2020-05-05T09:59:40.490Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":105,"name":"Timeline start (QA)","description":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":1,"plannedText":"We would prepare the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the QA work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. Development is underway.","blockedText":"We are waiting for manager input","hidden":false,"reference":"productTemplate","referenceId":30,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:39.000Z","updatedAt":"2020-05-05T09:59:40.522Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":100,"name":"Timeline start (development)","description":"A development plan has been created using the specifications you have provided us.","duration":2,"type":"phase-specification","order":1,"plannedText":"A development plan has been created using the specifications you have provided us.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development is complete.","blockedText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","hidden":false,"reference":"productTemplate","referenceId":28,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:36.000Z","updatedAt":"2020-05-05T09:59:40.662Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":127,"name":"Complete","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"delivery-design","order":22,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:53.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":101,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":8,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:36.000Z","updatedAt":"2020-05-05T09:59:41.377Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":108,"name":"Adding Links","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"add-links","order":6,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"ddfd","completedText":"Great news! The design enhancements to your top 5 designs are ready for review and selection..","blockedText":"df","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:41.000Z","updatedAt":"2020-05-05T09:59:40.960Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":97,"name":"Report 1","description":"Your Copilot will provide additional information on this milestone.","duration":7,"type":"generic-work","order":6,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. Your Copilot will provide additional information on this milestone.","completedText":"Development is complete. Your Copilot will provide additional information on this milestone.","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:34.000Z","updatedAt":"2020-05-05T09:59:41.329Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":21,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":23,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:24:03.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":116,"name":"Timeline start (design)","description":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","duration":1,"type":"phase-specification","order":1,"plannedText":"Before we can begin, we have to fill in the technical details. Your copilot will reach out shortly to discuss the specifications with you. Please monitor your communication thread for updates.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:46.000Z","updatedAt":"2020-05-05T09:59:40.917Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":46,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":3,"type":"community-work","order":4,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{},"deletedAt":null,"createdAt":"2018-08-10T12:32:27.000Z","updatedAt":"2020-05-05T09:59:40.953Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":47,"name":"Design Final Selection","description":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","duration":1,"type":"final-designs","order":10,"plannedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","activeText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","hidden":false,"reference":"productTemplate","referenceId":31,"metadata":{"requiredWinnersCount":8},"deletedAt":null,"createdAt":"2018-08-10T12:36:23.000Z","updatedAt":"2020-05-05T09:59:40.960Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":114,"name":"Final Fixes","description":"We will be resolving any final fixes you requested.","duration":7,"type":"final-fix","order":17,"plannedText":"We will be resolving any final fixes you requested.","activeText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","completedText":"Great news! Your final design fixes are complete. Your final design package is available as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"We are working to resolve the final fixes you requested for your designs. We will update this milestone once the progress bar reaches 100%.","hidden":true,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:45.000Z","updatedAt":"2020-05-05T09:59:41.023Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":17,"name":"Complete","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":1,"type":"delivery-design","order":32,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":26,"metadata":{},"deletedAt":null,"createdAt":"2018-08-08T16:12:43.000Z","updatedAt":"2020-05-05T09:59:41.032Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":111,"name":"Final Fixes (development)","description":"Your Copilot will provide additional information on this milestone.","duration":2,"type":"final-fix","order":6,"plannedText":"Your Copilot will provide additional information on this milestone.","activeText":"Development is underway. We will update this milestone once the progress bar reaches 100%.","completedText":"Development has been completed! This marks the end of the milestone. ","blockedText":"Your Copilot will provide additional information on this milestone.","hidden":true,"reference":"productTemplate","referenceId":29,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:43.000Z","updatedAt":"2020-05-05T09:59:41.068Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":110,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":9,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. It will also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:42.000Z","updatedAt":"2020-05-05T09:59:41.377Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":118,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":7,"type":"community-work","order":2,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:47.000Z","updatedAt":"2020-05-05T09:59:41.322Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":115,"name":"Delivery","description":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-dev","order":7,"plannedText":"Once you accept the code, your source files will be delivered here.","activeText":"Once you accept the code, your source files will be delivered here.","completedText":"Development has been completed! This marks the end of the milestone. Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Once you accept the code, your source files will be delivered here.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:45.000Z","updatedAt":"2020-05-05T09:59:41.329Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":138,"name":"Final Designs","description":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","duration":5,"type":"final-designs","order":4,"plannedText":"We will design the remaining screens with the feedback from the 5 designs you selected. Once the designs are completed, you will see them here. You'll then choose your 3 favorite options.","activeText":"Our designers are hard at work, incorporating your feedback and designing the remaining screens. We will update this milestone once the progress bar reaches 100%, and you'll see all the links available below.","completedText":"You've selected the winning designs! This concludes the final design milestone.","blockedText":"Great news! The designs are now completed. Please pick your winners using the interface below. You get the first 3 designs as part of this phase. If you'd like, you can purchase the remaning 2 at an additional $100 per design.","hidden":false,"reference":"productTemplate","referenceId":168,"metadata":{},"deletedAt":null,"createdAt":"2019-08-28T05:53:47.000Z","updatedAt":"2020-05-05T09:59:41.190Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":117,"name":"Design development","description":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","duration":3,"type":"community-work","order":2,"plannedText":"We will be designing several independent proposals in accordance with your specifications for you to choose from.","activeText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","completedText":"Great news! Designs are ready for review and selection.","blockedText":"We're currently designing the proposals. We will update this milestone with a list of all these soon.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:47.000Z","updatedAt":"2020-05-05T09:59:41.282Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":113,"name":"Design Final Selection","description":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","duration":1,"type":"final-designs","order":8,"plannedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","activeText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 8 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design. ","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{"requiredWinnersCount":8},"deletedAt":null,"createdAt":"2019-05-27T13:39:44.000Z","updatedAt":"2020-05-05T09:59:41.329Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":98,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":5,"plannedText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","activeText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":25,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:34.000Z","updatedAt":"2020-05-05T09:59:41.365Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":19,"name":"Design Final Selection","description":"A design plan has been created using the specifications you have provided us.","duration":7,"type":"final-designs","order":9,"plannedText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","activeText":"Please select the top 3 designs from the list below. You will own them as per your Topcoder project contract. If you like any of the outstanding designs you can purchase them at additional $100 per design.","completedText":"You've selected the winning designs! This concludes the final design milestone. If you have any final enhancements to your selected designs, please indicate here. Leave your feedback using the Marvel app interface. The more direction you are able to provide at this point, the better the final designs will be.","blockedText":"Please select the top 3 designs from the list bellow. You will own them as per your Topcoder project contract. If you like any of the two outstanding designs you can purchase them at additional $100 per design. Once you make your selection we will deliver the final design package in the next milestone as a .zip compressed folder. If you need further assistance please contact your copilot in the phase discussion thread.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:20:27.000Z","updatedAt":"2020-05-05T09:59:41.452Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":109,"name":"Complete","description":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","duration":1,"type":"delivery-design","order":10,"plannedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","activeText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","completedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","blockedText":"Design has been completed! Below you'll find the source files attached as a .zip archive, as per the phase specifications. They'll also be permanently available for download at your convenience.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2019-05-27T13:39:41.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":18,"name":"Timeline start (design)","description":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","duration":2,"type":"phase-specification","order":14,"plannedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","activeText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","completedText":"Specification is completed. We're now working on the design options.","blockedText":"We are preparing the final specification for the design work. Your copilot will communicate the details of the phase on the Posts thread before we begin work.","hidden":false,"reference":"productTemplate","referenceId":174,"metadata":{},"deletedAt":null,"createdAt":"2018-08-09T12:19:01.000Z","updatedAt":"2020-05-05T09:59:41.459Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"OrgConfig":[],"Form":[{"id":1,"key":"app_new_versioning","version":1,"revision":1,"config":{"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"wizard":{"previousStepVisibility":"none","enabled":true},"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}]},"deletedAt":null,"createdAt":"2019-07-25T07:48:45.000Z","updatedAt":"2020-05-05T09:59:36.717Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":3,"key":"dev","version":1,"revision":1,"config":{"test create":"test create"},"deletedAt":null,"createdAt":"2020-05-04T10:01:38.335Z","updatedAt":"2020-05-05T09:59:36.727Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":2,"key":"app_new_workstreams","version":1,"revision":1,"config":{"preparedConditions":{"REAL_WORLD_UNSTRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-unstructured')","HAS_BLACKDUCK_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"blackduck-scanning\"}')","HAS_ZEPLIN_APP_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"zeplin-app-handoff\"}')","TEST_CASE_EXECUTION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-300')","ONLY_ONE_OS_PROGRESSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'progressive'))","HAS_AUTOMATION_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"automation-testing\"}')","TEST_CASE_CREATION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-50')","HAS_THIRD_PARTY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"third-party-integration\"}')","HAS_LOCATION_SERVICES_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"location-based-services\"}')","HAS_API_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-integration\"}')","ONLY_ONE_OS_DESKTOP":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'desktop'))","THREE_DELIVERABLES":"(details.appDefinition.deliverables hasLength 3)","HAS_RESP_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"responsive-ui-prototype\"}')","HAS_SMTP_SERVER_SETUP_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"smtp-server-setup\"}')","HAS_DESIGN_DIRECTION_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"design-direction\"}')","UNSTRUCT_SCREEN_COUNT_SMALL":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-10')","HAS_API_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"api-development\"}')","HAS_QA_DELIVERABLE":"(details.appDefinition.deliverables contains 'qa')","TEST_CASE_EXECUTION_COUNT_SMALL":"(details.appDefinition.structuredTestsCount == 'upto-150')","REAL_WORLD_STRUCT_TESTING":"(details.appDefinition.qaType contains 'real-world-structured')","HAS_WIREFRAMES_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"wireframes\"}')","HAS_DEV_DELIVERABLE":"(details.appDefinition.deliverables contains 'dev-qa')","SCREENS_COUNT_MEDIUM":"(details.appDefinition.numberScreens == '5-8')","HAS_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment')","TEST_CASE_CREATION_COUNT_LARGE":"(details.appDefinition.structuredTestsCount == 'upto-100')","UNSTRUCT_SCREEN_COUNT_LARGE":"(details.appDefinition.unstructuredTestsScreenCount == 'upto-30')","QUICK_DESIGN_3_DAYS":"(details.appDefinition.quickTurnaround == 'under-3-days')","ONLY_INTERNAL_DEPLOYMENT":"(details.appDefinition.deploymentTargets contains 'internal-production-environment') && (details.appDefinition.deploymentTargets hasLength 1)","HAS_SMS_GATEWAY_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sms-gateway-integration\"}')","HAS_UAT_ENHANCEMENTS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"user-acceptance-testing-enhancements\"}')","HAS_CI_CD_ADDON":"(details.appDefinition.addons.deployment contains '{\"productKey\":\"continuous-integration-deployment\"}')","ONE_DELIVERABLE":"(details.appDefinition.deliverables hasLength 1)","QUICK_DESIGN_6_DAYS":"(details.appDefinition.quickTurnaround == 'under-6-days')","HAS_GOOGLE_ANALYTICS_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"google-analytics-impl\"}')","CA_NEEDED":"(details.appDefinition.caNeeded == 'yes')","FOUR_DELIVERABLES":"(details.appDefinition.deliverables hasLength 4)","STRUCT_TEST_CASE_CREATION":"(details.appDefinition.structuredTestWorkType contains 'test-case-creation')","ONE_TARGET_DEVICE":"(details.appDefinition.targetDevices hasLength 1)","SCREENS_COUNT_SMALL":"(details.appDefinition.numberScreens == '2-4')","HAS_ADMIN_TOOL_DEV_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"admin-tool-development\"}')","ONLY_ONE_OS_RESPONSIVE":"((details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.targetDevices hasLength 1) && (details.appDefinition.progressiveResponsive == 'responsive'))","THREE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 3)","PERFORMANCE_TESTING":"(details.appDefinition.qaType contains 'performance-testing')","AUTOMATED_TEST_COUNT_SMALL":"(details.appDefinition.automatedTestsCount == 'upto-50')","ONLY_TWO_OS_MOBILE_DESKTOP":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'desktop'))","MORE_THAN_ONE_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2) || (details.appDefinition.targetDevices hasLength 3) || (details.appDefinition.targetDevices hasLength 4)","HAS_CHECKMARX_SCANNING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"checkmarx-scanning\"}')","HAS_PERF_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"performance-testing-cycle\"}')","MOBILITY_TESTING":"(details.appDefinition.qaType contains 'mobility-testing')","ONLY_ONE_OS_MOBILE":"((details.appDefinition.mobilePlatforms hasLength 1) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","AUTOMATED_TESTING":"(details.appDefinition.qaType contains 'automated-testing')","HAS_SOCIAL_MEDIA_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"social-media-integration\"}')","CA_NOT_NEEDED":"(details.appDefinition.caNeeded != 'yes')","HAS_UNIT_TESTING_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"unit-tests\"}')","SCREENS_COUNT_LARGE":"(details.appDefinition.numberScreens == '9-15')","ONLY_TWO_OS_BOTH_MOBILES":"((details.appDefinition.mobilePlatforms hasLength 2) && (!(details.appDefinition.targetDevices contains 'desktop')) && (!(details.appDefinition.targetDevices contains 'web-browser')))","HAS_OFFLINE_CAPABILITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"offline-capability\"}')","ONE_QA_DELIVERABLE":"(details.appDefinition.structuredTestWorkType hasLength 1)","IS_WEB_RESP_APP":"(details.appDefinition.progressiveResponsive == 'responsive')","CONCEPT_DESIGN":"(details.appDefinition.designGoal == 'concept-designs')","AUTOMATED_TEST_COUNT_LARGE":"(details.appDefinition.automatedTestsCount == 'upto-100')","HAS_MIN_BATTERY_USE_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"min-battery-use-impl\"}')","HAS_BACKEND_DEVELOPMENT_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"backend-development\"}')","HAS_MAZE_UX_TESTING_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ux-testing-with-maze\"}')","ONLY_TWO_OS_MOBILE_PROGRESSIVE":"((details.appDefinition.mobilePlatforms hasLength 1) && (details.appDefinition.targetDevices contains 'web-browser') && (details.appDefinition.progressiveResponsive == 'progressive'))","COMPREHENSIVE_DESIGN":"(details.appDefinition.designGoal == 'comprehensive-designs')","HAS_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play'))","TWO_DELIVERABLES":"(details.appDefinition.deliverables hasLength 2)","ONLY_MOBILE_DEPLOYMENT":"((details.appDefinition.deploymentTargets contains 'apple-app-store') || (details.appDefinition.deploymentTargets contains 'google-play')) && (!(details.appDefinition.deploymentTargets contains 'internal-production-environment'))","HAS_DEPLOY_DELIVERABLE":"(details.appDefinition.deliverables contains 'deployment')","HAS_UI_PROTOTYPE_ADDON":"(details.appDefinition.addons.design contains '{\"productKey\":\"ui-prototype\"}')","HAS_DESIGN_DELIVERABLE":"(details.appDefinition.deliverables contains 'design')","HAS_RESP_DESIGN_IMPL_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"resp-design-impl\"}')","STRUCT_TEST_CASE_EXECUTION":"(details.appDefinition.structuredTestWorkType contains 'test-case-execution')","TWO_TARGET_DEVICES":"(details.appDefinition.targetDevices hasLength 2)","HAS_CONTAINERIZED_CODE_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"containerized-code\"}')","HAS_MOBILE_ENT_SECURITY_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"mobile-enterprise-security\"}')","HAS_SSO_INTEGRATION_ADDON":"(details.appDefinition.addons.development contains '{\"productKey\":\"sso-integration\"}')"},"wizard":{"previousStepVisibility":"none","enabled":true},"sections":[{"subSections":[{"hideTitle":true,"description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","theme":"light","type":"message"},{"questions":[{"fieldName":"name","theme":"light","validations":"isRequired","type":"textinput","title":"What is the name of your app?","validationError":"Please, provide a name to your project","required":true},{"fieldName":"description","theme":"light","type":"textbox","title":"Please describe your app using 2-3 sentences","validationError":"Please, provide a description","required":true},{"fieldName":"details.utm.code","theme":"light","type":"textinput","title":"Do you have a Reference code? (optional)"}],"title":"App details","type":"questions"}],"statusText":"Let's go","id":"project-basic-details","title":"Basic Details"},{"subSections":[{"questions":[{"hiddenOnEdit":true,"type":"static","content":"

{{name}}

{{description}}

"},{"help":{"linkTitle":"What work is right for me?","title":"What work is right for me?","content":"

Topcoder has design, development, and deployment solutions can be combined in a single project to help you deliver an end-to-end application.

It is important to note that all Topcoder development projects include standard quality assurance testing at no additional cost to help ensure you are getting the highest-quality application possible.

"},"fieldName":"details.appDefinition.deliverables","icon":"question","options":[{"summaryLabel":"Design","description":"We will design your app experience, focusing on the major features and experiences.","label":"Design","value":"design"},{"summaryLabel":"Development","description":"We will develop your app based on existing designs. Building a reliable application for you is our priority. We include standard quality assurance testing at no additional cost when doing any development.","label":"Development & QA","value":"dev-qa"},{"description":"Our team will ensure that your code is packaged and distributed on all targeted platforms and/or in the Apple/Google app stores.","label":"Deployment","value":"deployment"}],"description":"","theme":"light","validations":"isRequired","title":"What do you need?","type":"checkbox-group","summaryTitle":"Work needed","validationError":"Please, choose what do you need.","required":true},{"fieldName":"details.appDefinition.designGoal","icon":"question","description":"","title":"What is the goal of your designs?","type":"radio-group","summaryTitle":"Design goal","validationError":"Please, choose you design goal.","required":true,"help":{"linkTitle":"What should I choose?","title":"What should I choose?","content":"

Conceptual exploration

It enables you to explore UI and UX concepts for your application with industry-leading experts. This is the best choice when you are exploring ideas for a new application, but are not ready to begin development immediately. While design concepts empower you to explore different ideas, the design-deliverables are not considered production-ready as they will not contain detailed workflows for your entire application.

Production-ready designs

These are best used when you are ready to begin development on your application immediately after design-completion. These designs will include detailed workflows and options for your application.

"},"condition":"HAS_DESIGN_DELIVERABLE","options":[{"disableCondition":"HAS_DEV_DELIVERABLE","summaryLabel":"Concept","description":"We will produce high-quality screens with different directions that would help you define your product direction, and present to stakeholders.","label":"Concept exploration","value":"concept-designs"},{"summaryLabel":"Production-ready designs","autoSelectCondition":"HAS_DEV_DELIVERABLE","description":"Our designers will create detailed, designed workflows that can be immediately ready for development upon completion.","label":"Production-ready designs","value":"comprehensive-designs"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.quickTurnaround","icon":"question","description":"","title":"How quickly do you need your conceptual designs?","type":"radio-group","summaryTitle":"Quick Turnaround","validationError":"Please, choose your time expectations.","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Topcoder has two backend solutions - RUX (3 Days) and Design Sprint (6 Days) - that provide customers with design concepts. The deliverables that you can expect from these two solutions are consistent, meaning that both will produce high-quality design concepts that will enable you to leverage our expert crowd in generating ideas for your application. The primary difference between these two solutions is the turnaround time. As the RUX solution has an expedited turnaround time of three days, a service charge is included in the price.

"},"condition":"CONCEPT_DESIGN","options":[{"summaryLabel":"3 days","description":"Our designer consultants will work with you to formulate the app screens and deliver the final concepts within only 3 short days.","label":"I want concept designs in 3 days.","value":"under-3-days"},{"summaryLabel":"6 days","description":"Topcoder will create agency-quality design variants for your app within 7 days.","label":"I want concept designs in 6 days.","value":"under-6-days"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deliverables","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.targetDevices","icon":"question","description":"","title":"Where should your app work?","type":"checkbox-group","summaryTitle":"Devices","validationError":"Please, select devices","required":true,"help":{"linkTitle":"What to choose","title":"What to choose","content":"

Topcoder has the capability to create applications that are accessible as standalone applications from mobile or tablet devices, as well as applications that are accessible via a web browser from desktops, mobile or tablet devices.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE )","affectsQuickQuote":true,"options":[{"description":"Your app can be installed and launched on mobile devices. This is Topcoder’s most requested option.","label":"Mobile","value":"mobile"},{"description":"Your app can be used on tablet devices, with an optimized layout for tablets.","label":"Tablet","value":"tablet"},{"description":"Your app would be accessed via web browser on desktop, mobile and tablet devices alike.","label":"Web Browser","value":"web-browser"}],"theme":"light","validations":"isRequired"},{"help":{"linkTitle":"Which platforms to select?","title":"Which platforms to select?","content":"

Topcoder can create mobile applications for iOS, Android, or iOS and Android platforms.

"},"condition":"( details.appDefinition.targetDevices contains 'mobile' ) || ( details.appDefinition.targetDevices contains 'tablet' )","fieldName":"details.appDefinition.mobilePlatforms","affectsQuickQuote":true,"icon":"question","options":[{"description":"Your app would work on iOS phones. We will develop it using Objective-C and SWIFT","label":"iOS","value":"ios"},{"description":"Your app would work on all Android phones, and will be developed using Java. It would be highly optimized for the hardware and have a full experience for the end users.","label":"Android","value":"android"}],"description":"","theme":"light","title":"What type of platform do you need?","type":"checkbox-group","summaryTitle":"Mobile platforms"},{"fieldName":"details.appDefinition.nativeHybrid","icon":"question","description":"","title":"Does your app need to be Native or Hybrid?","type":"radio-group","summaryTitle":"App Type","validationError":"Please let us know the type of the app?","required":true,"help":{"linkTitle":"Which OS to select?","title":"Which OS to select?","content":"

Native operating systems are a SDK framework for building iOS and/or Android applications. Native applications typically have better performance if rich features such as video or audio are required.

Hybrid operating systems leverages a hybrid framework, such as Iconic, to build iOS and/or Android applications. Hybrid gives you the benefit of only having to maintain one code base for your application.

"},"condition":"( details.appDefinition.mobilePlatforms contains 'ios' ) || ( details.appDefinition.mobilePlatforms contains 'android' )","options":[{"description":"","label":"Native","value":"native"},{"description":"","label":"Hybrid","value":"hybrid"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.appDefinition.progressiveResponsive","icon":"question","description":"","title":"How should your app work when accessed via web browser?","type":"radio-group","summaryTitle":"Web App Type","validationError":"Please let us know the type of web app?","required":true,"help":{"linkTitle":"What is the difference?","title":"What is the difference?","content":"

Progressive Web Applications are mobile web apps. They are built using a native framework so that it looks and functions like a native application, with rich features like GPS.

Responsive Web Applications are web apps that can be accessed from mobile, tablet, and/or desktop devices. You can choose custom layouts depending on device type.

Desktop Web Browser Applications come in one layout and are only accessed from desktop devices using common web browsers such as Chrome or Safari.

"},"condition":"( details.appDefinition.targetDevices contains 'web-browser' )","options":[{"description":"Your web application can be accessed from all common mobile web browsers and will be built using a native mobile framework.","label":"Progressive Web Application for Mobile Web Browsing","value":"progressive"},{"description":"Your web application can be accessed from all common desktop, mobile and tablet web browsers and will be optimized for all screen sizes.","label":"Responsive Web Application for Desktop, Tablet, and Mobile Web Browsing","value":"responsive"},{"description":"Your web application can be accessed from desktop devices on all common web browsers.","label":"Desktop Web Application","value":"desktop"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"target-devices-os","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.numberScreens","icon":"question","description":"","title":"How many screens do you need?","type":"radio-group","summaryTitle":"Screens","validationError":"Please let us know the number of screens required?","required":true,"help":{"linkTitle":"What are screens?","title":"What are screens?","content":"

Screens represent the number of unique pages within your application, which may include several features on each screen.

If you require more than 15 screens for your application, please indicate this in the Notes section of the form prior to submitting.

"},"condition":"( HAS_DESIGN_DELIVERABLE || HAS_DEV_DELIVERABLE ) && (!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP))","options":[{"description":"Suitable for small apps with 2-4 main features","disabled":false,"label":"2-4 screens","value":"2-4"},{"description":"Suitable for medium apps with 5-8 main features","disabled":false,"label":"5-8 screens","value":"5-8"},{"condition":"!QUICK_DESIGN_3_DAYS","description":"Suitable for larger apps with 9-15 main features","disabled":false,"label":"9-15 screens","value":"9-15"}],"theme":"light","validations":"isRequired"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"app-size-questions","type":"questions"},{"condition":"HAS_DEPLOY_DELIVERABLE","hideTitle":true,"questions":[{"condition":"HAS_DEPLOY_DELIVERABLE","fieldName":"details.appDefinition.deploymentTargets","icon":"question","options":[{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'ios') )","description":"Apple App Store Deployment","label":"Apple App Store","value":"apple-app-store"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.mobilePlatforms contains 'android') )","description":"Google App Store Deployment","label":"Google Play","value":"google-play"},{"condition":"( ONE_DELIVERABLE || (details.appDefinition.targetDevices contains 'desktop') || (details.appDefinition.targetDevices contains 'web-browser') )","description":"Deployment to your internal production environment","label":"Internal Production Environment","value":"internal-production-environment"}],"description":"","theme":"light","validations":"isRequired","title":"Where do you need your app deployed?","type":"checkbox-group","summaryTitle":"Deployment Targets","validationError":"Please, choose what do you need us to help with.","required":true}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"deployment-deliverable-questions","type":"questions"},{"hideTitle":true,"questions":[{"fieldName":"details.appDefinition.caNeeded","icon":"question","description":"","title":"What kind of support do you want on your project?","type":"radio-group","summaryTitle":"Architect","validationError":"Please, ley us know if you need a dedicated manager.","required":true,"help":{"linkTitle":"What is right for me?","title":"What is right for me?","content":"

Topcoder recommends including an Architect on projects where a high degree of technical complexity is anticipated, when multiple deliverables are needed, or when you are a new to Topcoder and need additional help navigating the crowdsourcing process. Architects will provide additional oversight to your project. The inclusion of an Architect on a project will result in a service charge.

"},"condition":"!( MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","options":[{"summaryLabel":"Yes","description":"Project managers will work with the Community on the execution of your deliverables. An Architect will be assigned to oversee the technical requirements and complexities of your project.","label":"Project Manager + Architect","value":"yes"},{"summaryLabel":"No","description":"You will partner directly with your Project Manager to align on the requirements for your project and they will work with the Community on the execution of your deliverables.","label":"Project Manager","value":"no"}],"theme":"light","validations":"isRequired"},{"fieldName":"details.apiDefinition.notes","icon":"question","description":"Add any other important information regarding your project (e.g., links to documents or existing applications)","title":"Notes","type":"textbox","summaryTitle":"Notes"}],"wizard":{"previousStepVisibility":"readOptimized"},"id":"tc-services-questions","type":"questions"},{"condition":"MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP","fieldName":"details.appDefinition.message","hideTitle":true,"description":"Wow! We love your idea. This is a very complex, technical solution. We will take a look at your project and contact you regarding next steps and a quote.","id":"customeQuote","title":"Message","type":"message"},{"hiddenOnCreation":true,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"description":"","wizard":{"previousStepVisibility":"write","enabled":true},"id":"appDefinition","title":"App Definition","required":true},{"subSections":[{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"type":"portal","content":[{"sectionIndex":1}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Configure my project","id":"summary-intermediate","hideFormHeader":true},{"subSections":[{"hideTitle":true,"questions":[{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DESIGN_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.design","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","title":"Design add-ons","type":"add-ons","category":"visual_design"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEV_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.development","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Development add-ons","type":"add-ons","category":"development"},{"help":{"linkTitle":"What to chose","title":"What to chose","content":"

Section One Title Goes Here

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

Build agency-level designed consumer-grade applications for any platform and device. Chose what suits your project best, and fine-tune it to really match your organization’s needs. We provide security, enterprise-level code quality, robust design, and an option for dedicated project manager. Unmatched speed thanks to a 1.3M network of the world’s best designers, developers and data scientists.

"},"condition":"HAS_DEPLOY_DELIVERABLE && !(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","fieldName":"details.appDefinition.addons.delivery","icon":"question","description":"Select any desired add-ons to your project. Please note that each add-on will incur a cost and has a delivery duration. Your project estimate will be updated to reflect the cost and duration of your base solution and add-ons. Additionally, you will receive a full breakdown on cost in the final project proposal from Topcoder.","theme":"light","summaryMode":"quantity","title":"Delivery add-ons","type":"add-ons","category":"deployment"}],"wizard":{"previousStepVisibility":"readOptimized","enabled":true},"type":"questions"}],"wizard":{"enabled":true},"id":"add-ons","title":"Configure my app"},{"subSections":[{"hideTitle":true,"questions":[{"type":"static","content":"

Your Project Estimate

"}],"type":"questions"},{"hideTitle":true,"type":"portal","content":[{"sectionIndex":1},{"sectionIndex":3}]},{"condition":"!(MORE_THAN_ONE_TARGET_DEVICES && IS_WEB_RESP_APP)","hideTitle":true,"questions":[{"type":"estimation","title":"Your project timeline","deliverables":[{"id":"design","deliverableKey":"design","title":"Design","enableCondition":"HAS_DESIGN_DELIVERABLE"},{"id":"development","deliverableKey":"dev-qa","title":"Development & QA","enableCondition":"HAS_DEV_DELIVERABLE"},{"id":"deployment","deliverableKey":"deployment","title":"Deploy","enableCondition":"HAS_DEPLOY_DELIVERABLE"}]}],"type":"questions"},{"hiddenOnCreation":false,"fieldName":"attachments","description":"","id":"files","title":"Please upload any document that can help us in moving ahead with the project","type":"files"}],"hiddenOnEdit":true,"footer":{"content":"

The duration estimate reflects the time required to execute and complete delivery. The estimate does not include the time required to align on specification requirements.

"},"nextButtonText":"Save my project","id":"summary-final","hideFormHeader":true}]},"deletedAt":null,"createdAt":"2019-07-27T03:43:24.000Z","updatedAt":"2020-05-05T09:59:36.724Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":4,"key":"test","version":1,"revision":1,"config":{},"deletedAt":null,"createdAt":"2019-12-27T12:43:08.605Z","updatedAt":"2020-05-05T09:59:36.729Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"PlanConfig":[{"id":1,"key":"app_new_workstreams","version":1,"revision":1,"config":{"workstreamsConfig":{"workstreams":[{"name":"Design Workstream","type":"design"},{"name":"Development Workstream","type":"development"},{"name":"QA Workstream","type":"qa"},{"name":"Deployment Workstream","type":"deployment"}],"projectFieldName":"details.appDefinition.deliverables","workstreamTypesToProjectValues":{"qa":["dev-qa"],"development":["dev-qa"],"design":["design"],"deployment":["deployment"]}}},"deletedAt":null,"createdAt":"2019-07-27T07:35:38.000Z","updatedAt":"2020-05-05T09:59:36.777Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333},{"id":2,"key":"dev","version":1,"revision":1,"config":{"test create":"test create"},"deletedAt":null,"createdAt":"2020-05-04T10:03:55.211Z","updatedAt":"2020-05-05T09:59:36.780Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"PriceConfig":[{"id":1,"key":"dev","version":1,"revision":1,"config":{"test create":"test create"},"deletedAt":null,"createdAt":"2020-05-04T10:04:26.983Z","updatedAt":"2020-05-05T09:59:36.814Z","deletedBy":null,"createdBy":40051333,"updatedBy":40051333}],"BuildingBlock":[],"Project":[{"id":1,"directProjectId":null,"billingAccountId":null,"name":"App New","description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","external":null,"bookmarks":[],"utm":null,"estimatedPrice":null,"actualPrice":null,"terms":[],"type":"scoped-solutions","status":"in_review","details":{"intakePurpose":"demo-test-other","utm":{},"appDefinition":{"deliverables":["deployment"],"deploymentTargets":["internal-production-environment"]},"apiDefinition":{},"hideDiscussions":true},"challengeEligibility":[],"cancelReason":null,"templateId":221,"deletedAt":null,"createdAt":"2020-05-05T10:10:47.007Z","updatedAt":"2020-05-05T10:10:47.008Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"version":"v3","lastActivityAt":"2020-05-05T10:10:46.988Z","lastActivityUserId":"40152856"},{"id":2,"directProjectId":null,"billingAccountId":null,"name":"App New 2","description":"We will ask you several questions in order to determine your project’s scope. All estimates are based on our 15 years of experience and thousands of projects. Final prices will be determined after our team completes a final scope review.","external":null,"bookmarks":[],"utm":null,"estimatedPrice":null,"actualPrice":null,"terms":[],"type":"scoped-solutions","status":"in_review","details":{"intakePurpose":"exploring-options","utm":{},"appDefinition":{"deliverables":["deployment"],"deploymentTargets":["internal-production-environment"]},"apiDefinition":{},"hideDiscussions":true},"challengeEligibility":[],"cancelReason":null,"templateId":221,"deletedAt":null,"createdAt":"2020-05-05T10:11:31.912Z","updatedAt":"2020-05-05T10:11:31.913Z","deletedBy":null,"createdBy":40152922,"updatedBy":40152922,"version":"v3","lastActivityAt":"2020-05-05T10:11:31.898Z","lastActivityUserId":"40152922"}],"ProjectPhase":[{"id":1,"name":"Development Iteration (3 Milestones)","description":null,"requirements":null,"status":"draft","startDate":"2020-05-05T00:00:00.000Z","endDate":"2020-05-14T00:00:00.000Z","duration":null,"budget":0,"spentBudget":0,"progress":0,"details":{},"order":null,"deletedAt":null,"createdAt":"2020-05-05T10:12:01.016Z","updatedAt":"2020-05-05T10:12:01.016Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"projectId":2}],"PhaseProduct":[{"id":1,"name":"Development Iteration (3 Milestones)","projectId":2,"directProjectId":null,"billingAccountId":null,"templateId":27,"type":"development-iteration-3-milestones","estimatedPrice":0,"actualPrice":0,"details":{},"deletedAt":null,"createdAt":"2020-05-05T10:12:01.045Z","updatedAt":"2020-05-05T10:12:01.045Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"phaseId":1}],"ProjectAttachment":[],"ProjectMember":[{"id":1,"userId":40152856,"role":"manager","isPrimary":true,"deletedAt":null,"createdAt":"2020-05-05T10:10:47.007Z","updatedAt":"2020-05-05T10:10:47.036Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"projectId":1},{"id":2,"userId":40152922,"role":"customer","isPrimary":true,"deletedAt":null,"createdAt":"2020-05-05T10:11:31.912Z","updatedAt":"2020-05-05T10:11:31.928Z","deletedBy":null,"createdBy":40152922,"updatedBy":40152922,"projectId":2},{"id":3,"userId":40152856,"role":"manager","isPrimary":false,"deletedAt":null,"createdAt":"2020-05-05T10:11:48.579Z","updatedAt":"2020-05-05T10:11:48.580Z","deletedBy":null,"createdBy":40152856,"updatedBy":40152856,"projectId":2}],"ProjectMemberInvite":[]} \ No newline at end of file diff --git a/docs/Project API.postman_collection.json b/docs/Project API.postman_collection.json index 6f3d9895..8035b068 100644 --- a/docs/Project API.postman_collection.json +++ b/docs/Project API.postman_collection.json @@ -7,9 +7,11 @@ "item": [ { "name": "Project Attachments", + "description": null, "item": [ { "name": "bookmarks", + "description": null, "item": [ { "name": " Create project without bookmarks", @@ -115,6 +117,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}", "host": [ @@ -231,6 +237,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects", "host": [ @@ -244,7 +254,6 @@ "response": [] } ], - "protocolProfileBehavior": {}, "_postman_isSubFolder": true }, { @@ -487,9 +496,6 @@ }, { "name": "List attachments", - "protocolProfileBehavior": { - "disableBodyPruning": true - }, "request": { "method": "GET", "header": [ @@ -589,11 +595,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project With TemplateId issue", + "description": null, "item": [ { "name": "Create project with templateId (not existed)", @@ -670,11 +676,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project Members", + "description": null, "item": [ { "name": "Create project member with no payload", @@ -1030,6 +1036,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/members", "host": [ @@ -1055,6 +1065,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/members?role=customer", "host": [ @@ -1078,9 +1092,6 @@ }, { "name": "Get project member", - "protocolProfileBehavior": { - "disableBodyPruning": true - }, "request": { "method": "GET", "header": [ @@ -1180,11 +1191,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project Members Invites", + "description": null, "item": [ { "name": "List project member invite", @@ -1411,9 +1422,6 @@ }, { "name": "Get project member invite", - "protocolProfileBehavior": { - "disableBodyPruning": true - }, "request": { "method": "GET", "header": [ @@ -1621,11 +1629,11 @@ ] } } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Projects", + "description": "Requests for all things projects.", "item": [ { "name": "Create project without payload", @@ -1776,6 +1784,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}", "host": [ @@ -1800,6 +1812,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}?fields=id,name,description,members.id,members.projectId", "host": [ @@ -1830,6 +1846,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects", "host": [ @@ -1853,6 +1873,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects?perPage=1&page=1", "host": [ @@ -1886,6 +1910,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects?type=generic", "host": [ @@ -1915,6 +1943,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects?id=1&id=2", "host": [ @@ -1948,6 +1980,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects?sort=type asc", "host": [ @@ -1977,6 +2013,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects?fields=id,name,description", "host": [ @@ -2006,6 +2046,10 @@ "value": "Bearer {{jwt-token-copilot-40051332}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects", "host": [ @@ -2555,12 +2599,11 @@ }, "response": [] } - ], - "description": "Requests for all things projects.", - "protocolProfileBehavior": {} + ] }, { "name": "Workstream", + "description": "Requests for all things projects.", "item": [ { "name": "Create workstream without payload", @@ -2686,6 +2729,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams/{{workStreamId}}", "host": [ @@ -2712,6 +2759,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams", "host": [ @@ -2791,12 +2842,11 @@ }, "response": [] } - ], - "description": "Requests for all things projects.", - "protocolProfileBehavior": {} + ] }, { "name": "Work", + "description": "Requests for all things projects.", "item": [ { "name": "Create work without payload", @@ -2963,6 +3013,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams/{{workStreamId}}/works/{{workId}}", "host": [ @@ -2991,6 +3045,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams/{{workStreamId}}/works", "host": [ @@ -3018,6 +3076,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams/{{workStreamId}}/works?sort=startDate desc", "host": [ @@ -3051,6 +3113,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams/{{workStreamId}}/works?fields=status,name,budget", "host": [ @@ -3176,12 +3242,11 @@ }, "response": [] } - ], - "description": "Requests for all things projects.", - "protocolProfileBehavior": {} + ] }, { "name": "Work Item", + "description": "Requests for all things projects.", "item": [ { "name": "Create work item without payload", @@ -3317,6 +3382,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams/{{workStreamId}}/works/{{workId}}/workitems/{{itemId}}", "host": [ @@ -3347,6 +3416,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/workstreams/{{workStreamId}}/works/{{workId}}/workitems", "host": [ @@ -3438,12 +3511,11 @@ }, "response": [] } - ], - "description": "Requests for all things projects.", - "protocolProfileBehavior": {} + ] }, { "name": "Work Management Permission", + "description": "Requests for all things projects.", "item": [ { "name": "Create work management permission without payload", @@ -3617,6 +3689,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/workManagementPermission/{{workManagementPermissionId}}", "host": [ @@ -3643,6 +3719,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/workManagementPermission", "host": [ @@ -3668,6 +3748,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/workManagementPermission?filter=template", "host": [ @@ -3699,6 +3783,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/workManagementPermission?filter=invalid%3D2%26projectTemplateId%3D1", "host": [ @@ -3730,6 +3818,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/workManagementPermission?filter=projectTemplateId%3D1", "host": [ @@ -3815,12 +3907,11 @@ }, "response": [] } - ], - "description": "Requests for all things projects.", - "protocolProfileBehavior": {} + ] }, { "name": "Permissions", + "description": null, "item": [ { "name": "Get permissions - 404", @@ -3832,6 +3923,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/9999/permissions", "host": [ @@ -3925,6 +4020,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/permissions", "host": [ @@ -3950,6 +4049,10 @@ "value": "Bearer {{jwt-token-manager-40051334}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/permissions", "host": [ @@ -3987,11 +4090,11 @@ ] } } - ], - "protocolProfileBehavior": {} + ] }, { "name": "WorkManagementForTemplate", + "description": "Requests for all things projects.", "item": [ { "name": "Create workstream with valid values", @@ -4325,12 +4428,11 @@ }, "response": [] } - ], - "description": "Requests for all things projects.", - "protocolProfileBehavior": {} + ] }, { "name": "EventHandling and Integration with Direct Project API", + "description": null, "item": [ { "name": "mock direct projects", @@ -4346,6 +4448,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "https://api.topcoder-dev.com/v3/direct/projects", "protocol": "https", @@ -4576,11 +4682,11 @@ ] } } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project Phase", + "description": null, "item": [ { "name": "Create Phase", @@ -4737,6 +4843,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/phases", "host": [ @@ -4765,6 +4875,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/phases?fields=status,name,budget", "host": [ @@ -4799,6 +4913,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/phases?sort=status desc", "host": [ @@ -4833,6 +4951,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/phases?sort=order desc", "host": [ @@ -4867,6 +4989,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/phases/{{phaseId}}", "host": [ @@ -4981,11 +5107,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Phase Products", + "description": null, "item": [ { "name": "Create Phase Product", @@ -5046,6 +5172,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/phases/{{phaseId}}/products", "host": [ @@ -5072,6 +5202,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/phases/{{phaseId}}/products/{{phaseProductId}}", "host": [ @@ -5155,11 +5289,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project Templates", + "description": null, "item": [ { "name": "Create project template", @@ -5380,6 +5514,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates", "host": [ @@ -5408,6 +5546,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates/{{projectTemplateId}}", "host": [ @@ -5657,11 +5799,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Product Templates", + "description": null, "item": [ { "name": "Create product template", @@ -5835,6 +5977,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/productTemplates", "host": [ @@ -5863,6 +6009,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/productTemplates/{{productTemplateId}}", "host": [ @@ -6052,11 +6202,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project Type", + "description": null, "item": [ { "name": "Create project type", @@ -6119,6 +6269,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/projectTypes", "host": [ @@ -6147,6 +6301,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/projectTypes/{{projectTypeId}}", "host": [ @@ -6228,11 +6386,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Org Config", + "description": null, "item": [ { "name": "Create org config", @@ -6298,6 +6456,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/orgConfig", "host": [ @@ -6326,6 +6488,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/orgConfig?orgId={{orgStrId}}", "host": [ @@ -6361,6 +6527,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/orgConfig?orgId={{orgStrId}}&configName={{orgConfigName}}", "host": [ @@ -6474,11 +6644,11 @@ ] } } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Product Category", + "description": null, "item": [ { "name": "Create product category", @@ -6541,6 +6711,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/productCategories", "host": [ @@ -6569,6 +6743,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/productCategories/{{productCategoryId}}", "host": [ @@ -6682,11 +6860,11 @@ ] } } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project upgrade", + "description": "Request to migrate projects.", "item": [ { "name": "Migrate project", @@ -6816,12 +6994,11 @@ }, "response": [] } - ], - "description": "Request to migrate projects.", - "protocolProfileBehavior": {} + ] }, { "name": "Timeline", + "description": null, "item": [ { "name": "Create timeline", @@ -6963,6 +7140,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines?reference=project&referenceId={{projectId}}", "host": [ @@ -6999,6 +7180,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/{{timelineId}}", "host": [ @@ -7026,6 +7211,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/{{timelineId}}", "host": [ @@ -7163,11 +7352,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Milestone", + "description": null, "item": [ { "name": "Create milestone", @@ -7200,7 +7389,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\": \"milestone 3\",\r\n \"description\": \"description 3\",\r\n \"duration\": 4,\r\n \"startDate\": \"2018-05-29T00:00:00.000Z\",\r\n \"endDate\": \"2018-05-30T00:00:00.000Z\",\r\n \"completionDate\": \"2018-05-31T00:00:00.000Z\",\r\n \"status\": \"open\",\r\n \"type\": \"type3\",\r\n \"details\": {\r\n \"detail1\": {\r\n \"subDetail1C\": 3\r\n },\r\n \"detail2\": [\r\n 2,\r\n 3,\r\n 4\r\n ]\r\n },\r\n \"order\": 1,\r\n \"plannedText\": \"plannedText 3\",\r\n \"activeText\": \"activeText 3\",\r\n \"completedText\": \"completedText 3\",\r\n \"blockedText\": \"blockedText 3\"\r\n}" + "raw": "{\r\n \"name\": \"milestone 3\",\r\n \"description\": \"description 3\",\r\n \"duration\": 4,\r\n \"startDate\": \"2018-05-29T00:00:00.000Z\",\r\n \"endDate\": \"2018-05-30T00:00:00.000Z\",\r\n \"completionDate\": \"2018-05-31T00:00:00.000Z\",\r\n \"status\": \"draft\",\r\n \"type\": \"type3\",\r\n \"details\": {\r\n \"detail1\": {\r\n \"subDetail1C\": 3\r\n },\r\n \"detail2\": [\r\n 2,\r\n 3,\r\n 4\r\n ]\r\n },\r\n \"order\": 1,\r\n \"plannedText\": \"plannedText 3\",\r\n \"activeText\": \"activeText 3\",\r\n \"completedText\": \"completedText 3\",\r\n \"blockedText\": \"blockedText 3\"\r\n}" }, "url": { "raw": "{{api-url}}/timelines/{{timelineId}}/milestones", @@ -7263,6 +7452,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/{{timelineId}}/milestones", "host": [ @@ -7291,6 +7484,10 @@ "value": "Bearer {{jwt-token-copilot-40051332}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/{{timelineId}}/milestones?sort=order desc", "host": [ @@ -7325,6 +7522,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/{{timelineId}}/milestones/{{milestoneId}}", "host": [ @@ -7340,6 +7541,53 @@ }, "response": [] }, + { + "name": "Bulk update milestone", + "event": [ + { + "listen": "test", + "script": { + "id": "8fd1d5e9-8e6e-4cd7-9010-b855308be069", + "exec": [ + "pm.test(\"Status code is 201\", function () {", + " pm.response.to.have.status(201);", + " pm.environment.set(\"milestoneId\", pm.response.json().id);", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PATCH", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Bearer {{jwt-token-admin-40051333}}" + } + ], + "body": { + "mode": "raw", + "raw": "[{\r\n \"name\": \"milestone new\",\r\n \"description\": \"description new\",\r\n \"duration\": 4,\r\n \"startDate\": \"2018-05-29T00:00:00.000Z\",\r\n \"endDate\": \"2018-05-30T00:00:00.000Z\",\r\n \"completionDate\": \"2018-05-31T00:00:00.000Z\",\r\n \"status\": \"draft\",\r\n \"type\": \"type3\",\r\n \"details\": {\r\n \"detail1\": {\r\n \"subDetail1C\": 3\r\n },\r\n \"detail2\": [\r\n 2,\r\n 3,\r\n 4\r\n ]\r\n },\r\n \"order\": 1,\r\n \"plannedText\": \"plannedText 3\",\r\n \"activeText\": \"activeText 3\",\r\n \"completedText\": \"completedText 3\",\r\n \"blockedText\": \"blockedText 3\"\r\n},\r\n{\r\n\t\"id\": 2,\r\n \"name\": \"milestone 1-updated\",\r\n \"description\": \"description-updated\",\r\n \"duration\": 3,\r\n \"startDate\": \"2018-09-25T00:00:00.000Z\",\r\n \"completionDate\": \"2018-09-28T00:00:00.000Z\",\r\n \"status\": \"draft\",\r\n \"type\": \"type2\",\r\n \"details\": {\r\n \"detail1\": {\r\n \"subDetail1C\": 3\r\n },\r\n \"detail2\": [\r\n 4\r\n ]\r\n },\r\n \"order\": 1,\r\n \"plannedText\": \"plannedText 1-updated\",\r\n \"activeText\": \"activeText 1-updated\",\r\n \"completedText\": \"completedText 1-updated\",\r\n \"blockedText\": \"blockedText 1-updated\"\r\n}\r\n]" + }, + "url": { + "raw": "{{api-url}}/timelines/{{timelineId}}/milestones", + "host": [ + "{{api-url}}" + ], + "path": [ + "timelines", + "{{timelineId}}", + "milestones" + ] + } + }, + "response": [] + }, { "name": "Update milestone", "request": { @@ -7670,11 +7918,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Milestone Template", + "description": null, "item": [ { "name": "Create milestone template", @@ -7900,6 +8148,10 @@ "value": "Bearer {{jwt-token-copilot-40051332}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/metadata/milestoneTemplates", "host": [ @@ -7928,6 +8180,10 @@ "value": "Bearer {{jwt-token-copilot-40051332}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/metadata/milestoneTemplates?reference=productTemplate&referenceId={{productTemplateId}}", "host": [ @@ -7966,6 +8222,10 @@ "value": "Bearer {{jwt-token-copilot-40051332}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/metadata/milestoneTemplates?reference=productTemplate&referenceId={{productTemplateId}}&sort=order desc", "host": [ @@ -8008,6 +8268,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/timelines/metadata/milestoneTemplates/{{milestoneTemplateId}}", "host": [ @@ -8254,11 +8518,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Metadata", + "description": null, "item": [ { "name": "Get all metadata", @@ -8281,6 +8545,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata", "host": [ @@ -8309,6 +8577,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata?includeAllReferred=true", "host": [ @@ -8328,11 +8600,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Form Version", + "description": null, "item": [ { "name": "List forms", @@ -8349,6 +8621,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/form/{{formKey}}/versions", "host": [ @@ -8380,6 +8656,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/form/{{formKey}}/versions/{{formVersion}}", "host": [ @@ -8412,6 +8692,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/form/{{formKey}}", "host": [ @@ -8571,11 +8855,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Form Revision", + "description": null, "item": [ { "name": "List all revision for version", @@ -8592,6 +8876,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/form/{{formKey}}/versions/{{formVersion}}/revisions", "host": [ @@ -8625,6 +8913,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/form/{{formKey}}/versions/{{formVersion}}/revisions/{{formRevision}}", "host": [ @@ -8792,11 +9084,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Price Config Version", + "description": null, "item": [ { "name": "List price configs", @@ -8813,6 +9105,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/priceConfig/dev/versions", "host": [ @@ -8844,6 +9140,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/priceConfig/{{priceKey}}/versions/{{priceVersion}}", "host": [ @@ -8876,6 +9176,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/priceConfig/{{priceKey}}", "host": [ @@ -9057,11 +9361,11 @@ ] } } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Price Config Revision", + "description": null, "item": [ { "name": "List all revision for version", @@ -9078,6 +9382,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/priceConfig/dev/versions/3/revisions", "host": [ @@ -9111,6 +9419,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/priceConfig/{{priceKey}}/versions/{{priceVersion}}/revisions/{{priceRevision}}", "host": [ @@ -9278,11 +9590,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Plan Config Version", + "description": null, "item": [ { "name": "List plan configs", @@ -9299,6 +9611,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/planConfig/dev/versions", "host": [ @@ -9330,6 +9646,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/planConfig/{{planKey}}/versions/{{planVersion}}", "host": [ @@ -9362,6 +9682,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/planConfig/{{planKey}}", "host": [ @@ -9521,11 +9845,11 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Plan Config Revision", + "description": null, "item": [ { "name": "List all revision for version", @@ -9542,6 +9866,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/planConfig/{{planKey}}/versions/{{planVersion}}/revisions", "host": [ @@ -9575,6 +9903,10 @@ }, "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/metadata/planConfig/{{planKey}}/versions/{{planVersion}}/revisions/{{planRevision}}", "host": [ @@ -9742,14 +10074,15 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project Reports", + "description": null, "item": [ { "name": "summary", + "description": null, "item": [ { "name": "get report by admin", @@ -9762,6 +10095,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/reports?reportName=summary", "host": [ @@ -9793,6 +10130,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/reports?reportName=summary", "host": [ @@ -9824,6 +10165,10 @@ "value": "Bearer {{jwt-token-admin-40051333}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/123456/reports?reportName=summary", "host": [ @@ -9855,6 +10200,10 @@ "value": "Bearer {{jwt-token-admin-40051333}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/reports?reportName=summary123", "host": [ @@ -9876,11 +10225,11 @@ "response": [] } ], - "protocolProfileBehavior": {}, "_postman_isSubFolder": true }, { "name": "projectBudget", + "description": null, "item": [ { "name": "get report by admin", @@ -9893,6 +10242,10 @@ "value": "Bearer {{jwt-token-admin-40051333}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/reports?reportName=projectBudget", "host": [ @@ -9914,14 +10267,13 @@ "response": [] } ], - "protocolProfileBehavior": {}, "_postman_isSubFolder": true } - ], - "protocolProfileBehavior": {} + ] }, { "name": "Project Setting", + "description": null, "item": [ { "name": "Create project setting - double", @@ -10364,6 +10716,10 @@ "value": "Bearer {{jwt-token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/settings", "host": [ @@ -10392,6 +10748,10 @@ "value": "Bearer {{jwt-token-copilot-40051332}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/settings", "host": [ @@ -10420,6 +10780,10 @@ "value": "Bearer {{jwt-token-manager-40051334}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{api-url}}/projects/{{projectId}}/settings", "host": [ @@ -10632,9 +10996,7 @@ }, "response": [] } - ], - "protocolProfileBehavior": {} + ] } - ], - "protocolProfileBehavior": {} -} \ No newline at end of file + ] +} diff --git a/docs/guides/architercture/architecture.md b/docs/guides/architercture/architecture.md index 894ae741..a7c96058 100644 --- a/docs/guides/architercture/architecture.md +++ b/docs/guides/architercture/architecture.md @@ -73,4 +73,4 @@ payload: { "updatedBy": 1, }, } -``` \ No newline at end of file +``` diff --git a/docs/guides/permissions-guide/images/project-roles.png b/docs/guides/permissions-guide/images/project-roles.png new file mode 100644 index 00000000..d928bdb3 Binary files /dev/null and b/docs/guides/permissions-guide/images/project-roles.png differ diff --git a/docs/guides/permissions-guide/images/topcoder-roles.png b/docs/guides/permissions-guide/images/topcoder-roles.png new file mode 100644 index 00000000..aa1a21ab Binary files /dev/null and b/docs/guides/permissions-guide/images/topcoder-roles.png differ diff --git a/docs/guides/permissions-guide/permissions-guide.md b/docs/guides/permissions-guide/permissions-guide.md new file mode 100644 index 00000000..1f9623b9 --- /dev/null +++ b/docs/guides/permissions-guide/permissions-guide.md @@ -0,0 +1,76 @@ +# Permissions Guide + +What kind of permissions we have, how they work and how to use them. + +- [Overview](#overview) + - [Topcoder Roles](#topcoder-roles) + - [Project Role](#project-role) +- [How to Use](#how-to-use) +- [References](#references) + +## Overview + +Every user may have 2 kind of roles: **Topcoder Roles** and **Project Role**. + +### Topcoder Roles + +These roles are assigned to user accounts. User may have several **Topcoder Roles**. See [the list of all Topcoder Roles](https://github.com/topcoder-platform/tc-project-service/blob/develop/src/constants.js#L55-L69) which we use in Topcoder Project Service. + + + +By default every user has one role `Topcoder User`, generally this means that such a user is either **customer** or **community member** (freelancer). + +### Project Role + +When user joins some project and become a member of the project, such a user has one **Project Role** inside that project. One user may have different **Project Role** in different projects. See [the list of all Project Roles](https://github.com/topcoder-platform/tc-project-service/blob/develop/src/constants.js#L23-L33) which we use in Topcoder Project Service. + + + +## How to Use + +Let's say you would like to add a new place in code where you want to check user roles/permissions. Please, follow the next guide: + +1. Check if we already have defined permission for your case in the [permissions list](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html). + +2. If you cannot find the permission you need, add new permission to the file https://github.com/topcoder-platform/tc-project-service/blob/develop/src/permissions/constants.js. + + - Follow the guides on how to add a new permission in the header of this file. + +3. There are 2 places where you would usually check permissions: + 1. Check if user can call some endpoint (https://github.com/topcoder-platform/tc-project-service/blob/develop/src/permissions/index.js): + + ```js + Authorizer.setPolicy('projectMember.view', generalPermission(PERMISSION.READ_PROJECT_MEMBER)); + ``` + + or + + ```js + Authorizer.setPolicy('projectMember.edit', generalPermission([ + PERMISSION.UPDATE_PROJECT_MEMBER_CUSTOMER, + PERMISSION.UPDATE_PROJECT_MEMBER_NON_CUSTOMER, + ])); + ``` + + 2. Inside some endpoint code: + + ```js + import util from '../util'; + import { PERMISSION } from '../permissions/constants'; + + (req, res, next) => { + ... + if (hasPermissionByReq(permission, req)) { + ... + } + ... + } + ``` + +4. After you've added all the new permissions you wanted, regenerate [permissions list](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html) by running `npm run generate:doc:permissions`. Or run `npm run generate:doc:permissions:dev` which would automatically regenerate HTML file on every change - very useful during development. + +## References + +- [Permissions list](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html) + +- [Permissions list source](https://github.com/topcoder-platform/tc-project-service/blob/develop/src/permissions/constants.js) diff --git a/docs/permissions.html b/docs/permissions.html index 16be0bc6..33f4d536 100644 --- a/docs/permissions.html +++ b/docs/permissions.html @@ -273,10 +273,10 @@

- Update Project property "directProjectId" + Manage Project property "directProjectId"
-
UPDATE_PROJECT_DIRECT_PROJECT_ID
-
+
MANAGE_PROJECT_DIRECT_PROJECT_ID
+
Who can set or update the "directProjectId" property.
@@ -294,6 +294,29 @@

+
+
+
+ Manage Project property "billingAccountId" +
+
MANAGE_PROJECT_BILLING_ACCOUNT_ID
+
Who can set or update the "billingAccountId" property.
+
+
+
+
+ +
+ Connect Manager + administrator +
+ +
+ all:connect_project + write:projects-billing-accounts +
+
+
@@ -613,8 +636,8 @@

all:connect_project - all:project-members - read:project-members + all:project-invites + read:project-invites

@@ -647,8 +670,8 @@

all:connect_project - all:project-members - read:project-members + all:project-invites + read:project-invites

@@ -681,8 +704,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -711,8 +734,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -736,8 +759,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -759,8 +782,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -783,8 +806,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -808,8 +831,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -831,8 +854,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -856,8 +879,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -886,8 +909,8 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites
@@ -911,8 +934,223 @@

all:connect_project - all:project-members - write:project-members + all:project-invites + write:project-invites +
+ + +
+
+

+ Project Attachment +

+
+
+
+
+
+ Create Project Attachment +
+
CREATE_PROJECT_ATTACHMENT
+
+
+
+
+ Any Project Member +
+ +
+ Connect Admin + administrator + Connect Manager + Connect Account Manager + Connect Copilot Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager +
+ +
+ all:connect_project + all:projects + write:projects +
+
+
+
+
+
+ Read Project Attachment (own or allowed) +
+
READ_PROJECT_ATTACHMENT_OWN_OR_ALLOWED
+
Who can view own attachment or an attachment of another user when they are in the "allowed" list.
+
+
+
+ Any Project Member +
+ +
+ Connect Admin + administrator + Connect Manager + Connect Account Manager + Connect Copilot Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager +
+ +
+ all:connect_project + all:projects + read:projects +
+
+
+
+
+
+ Read Project Attachment (not own and not allowed) +
+
READ_PROJECT_ATTACHMENT_NOT_OWN_AND_NOT_ALLOWED
+
Who can view attachment of another user when they are not in "allowed" users list.
+
+
+
+
+ +
+ Connect Admin + administrator +
+ +
+ all:connect_project + all:projects + read:projects +
+
+
+
+
+
+ Update Project Attachment (own) +
+
UPDATE_PROJECT_ATTACHMENT_OWN
+
Who can edit attachment they created.
+
+
+
+ Any Project Member +
+ +
+ Connect Admin + administrator + Connect Manager + Connect Account Manager + Connect Copilot Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager +
+ +
+ all:connect_project + all:projects + write:projects +
+
+
+
+
+
+ Update Project Attachment (not own) +
+
UPDATE_PROJECT_ATTACHMENT_NOT_OWN
+
Who can edit attachment created by another user.
+
+
+
+
+ +
+ Connect Admin + administrator +
+ +
+ all:connect_project + all:projects + write:projects +
+
+
+
+
+
+ Delete Project Attachment (own) +
+
DELETE_PROJECT_ATTACHMENT_OWN
+
Who can delete attachment they created.
+
+
+
+ Any Project Member +
+ +
+ Connect Admin + administrator + Connect Manager + Connect Account Manager + Connect Copilot Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager +
+ +
+ all:connect_project + all:projects + write:projects +
+
+
+
+
+
+ Delete Project Attachment (not own) +
+
DELETE_PROJECT_ATTACHMENT_NOT_OWN
+
Who can delete attachment created by another user.
+
+
+
+
+ +
+ Connect Admin + administrator +
+ +
+ all:connect_project + all:projects + write:projects
diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 4389b666..3fc88ec2 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -3178,6 +3178,50 @@ paths: description: Internal Server Error schema: $ref: '#/definitions/ErrorModel' + patch: + tags: + - milestone + operationId: batchUpdateMilestone + security: + - Bearer: [] + description: >- + Update a batch of milestones. All users who can edit the timeline can access this + endpoint. For attributes with JSON object type, it would overwrite the + existing fields, or add new if the fields don't exist in the JSON + object. + parameters: + - in: body + name: body + required: true + schema: + type: array + items: + $ref: '#/definitions/Milestone' + responses: + '200': + description: Aggregation of bulk operations + schema: + $ref: '#/definitions/BulkMilestoneUpdateResponse' + '401': + description: Unauthorized + schema: + $ref: '#/definitions/ErrorModel' + '403': + description: Forbidden + schema: + $ref: '#/definitions/ErrorModel' + '404': + description: Not found + schema: + $ref: '#/definitions/ErrorModel' + '400': + description: Bad request + schema: + $ref: '#/definitions/ErrorModel' + '500': + description: Internal Server Error + schema: + $ref: '#/definitions/ErrorModel' '/timelines/{timelineId}/milestones/{milestoneId}': parameters: - $ref: '#/parameters/timelineIdParam' @@ -3257,7 +3301,9 @@ paths: in: body required: true schema: - $ref: '#/definitions/MilestonePatchRequest' + type: array + items: + $ref: '#/definitions/MilestonePatchRequest' delete: tags: - milestone @@ -6082,6 +6128,12 @@ definitions: description: READ-ONLY. User that last updated this object readOnly: true - $ref: '#/definitions/MilestonePostRequest' + BulkMilestoneUpdateResponse: + title: Bulk milestone update response object + type: array + items: + $ref: '#/definitions/Milestone' + MilestoneTemplateRequest: title: Milestone template request object type: object diff --git a/local/docker-compose.yml b/local/docker-compose.yml deleted file mode 100644 index 8c49d647..00000000 --- a/local/docker-compose.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: "2" -services: - jsonserver: - build: "mock-services" - ports: - - "3001:3001" - db: - build: "postgres-db" - ports: - - "5432:5432" - environment: - - POSTGRES_PASSWORD=mysecretpassword - - POSTGRES_USER=coder - - POSTGRES_MULTIPLE_DATABASES=projectsdb,projectsdb_test - esearch: - image: "elasticsearch:2.3" - ports: - - "9200:9200" - - "9300:9300" - queue: - image: "rabbitmq:3-management" - restart: always - ports: - - "5672:5672" - - "15672:15672" \ No newline at end of file diff --git a/local/full/docker-compose.yml b/local/full/docker-compose.yml index 2bd921af..b494df2f 100644 --- a/local/full/docker-compose.yml +++ b/local/full/docker-compose.yml @@ -1,23 +1,27 @@ version: "2" services: jsonserver: - extends: - file: ../docker-compose.yml - service: jsonserver + build: "../mock-services" + ports: + - "3001:3001" db: - extends: - file: ../docker-compose.yml - service: db + build: "../postgres-db" + ports: + - "5432:5432" environment: + - POSTGRES_PASSWORD=mysecretpassword + - POSTGRES_USER=coder - POSTGRES_MULTIPLE_DATABASES=projectsdb,projectsdb_test,tc_notifications esearch: - extends: - file: ../docker-compose.yml - service: esearch + image: "elasticsearch:2.3" + ports: + - "9200:9200" + - "9300:9300" queue: - extends: - file: ../docker-compose.yml - service: queue + image: "rabbitmq:3-management" + ports: + - "5672:5672" + - "15672:15672" zookeeper: image: wurstmeister/zookeeper ports: diff --git a/local/light/docker-compose.yml b/local/light/docker-compose.yml new file mode 100644 index 00000000..fd02046a --- /dev/null +++ b/local/light/docker-compose.yml @@ -0,0 +1,23 @@ +version: "2" +services: + jsonserver: + extends: + file: ../full/docker-compose.yml + service: jsonserver + + db: + extends: + file: ../full/docker-compose.yml + service: db + environment: + - POSTGRES_MULTIPLE_DATABASES=projectsdb,projectsdb_test + + esearch: + extends: + file: ../full/docker-compose.yml + service: esearch + + queue: + extends: + file: ../full/docker-compose.yml + service: queue diff --git a/package-lock.json b/package-lock.json index 46e2f2e2..e0bc55d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2518,6 +2518,58 @@ "capture-stack-trace": "^1.0.0" } }, + "cross-env": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", + "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -2741,11 +2793,6 @@ "is-obj": "^1.0.0" } }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, "dottie": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", @@ -2848,6 +2895,65 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "dev": true, + "requires": { + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", diff --git a/package.json b/package.json index b64fbca4..c48c04b1 100644 --- a/package.json +++ b/package.json @@ -7,32 +7,30 @@ "node": ">=12" }, "scripts": { - "lint": "./node_modules/.bin/eslint .", - "lint:fix": "./node_modules/.bin/eslint . --fix || true", + "lint": "eslint .", + "lint:fix": "eslint . --fix || true", "build": "babel src -d dist --presets es2015 --copy-files", - "sync:all": "NODE_ENV=development npm run sync:db && NODE_ENV=development npm run sync:es", - "sync:db": "./node_modules/.bin/babel-node migrations/sync.js", - "sync:es": "./node_modules/.bin/babel-node migrations/elasticsearch_sync.js", - "sync:es:metadata": "./node_modules/.bin/babel-node migrations/elasticsearch_sync.js --index-name metadata", - "migrate:es": "./node_modules/.bin/babel-node migrations/seedElasticsearchIndex.js", - "migrate:es:metadata": "./node_modules/.bin/babel-node migrations/helpers/indexMetadataDirectly.js", - "migrate:bookmarks": "./node_modules/.bin/babel-node migrations/bookmarks/migrateBookmarksToLinks.js", - "migrate:bookmarks:revert": "./node_modules/.bin/babel-node migrations/bookmarks/migrateLinksToBookmarks.js", "prestart": "npm run -s build", "start": "node dist", - "start:dev": "NODE_ENV=development PORT=8001 nodemon -w src --exec \"node --require dotenv/config --require babel-core/register src\" | ./node_modules/.bin/bunyan", + "start:dev": "cross-env NODE_ENV=development PORT=8001 nodemon -w src --exec \"./node_modules/.bin/env-cmd npm run babel-node-script -- src\" | bunyan", "startKafkaConsumers": "npm run -s build && node dist/index-kafka.js", - "startKafkaConsumers:dev": "NODE_ENV=development nodemon -w src --exec \"babel-node src/index-kafka.js --presets es2015\" | ./node_modules/.bin/bunyan", - "test": "NODE_ENV=test npm run lint && NODE_ENV=test npm run sync:es && NODE_ENV=test npm run sync:db && NODE_ENV=test ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha -- --timeout 10000 --require babel-core/register $(find src -path '*spec.js*') --exit", - "test:watch": "NODE_ENV=test ./node_modules/.bin/mocha -w --require babel-core/register $(find src -path '*spec.js*')", - "demo-data": "babel-node local/seed", - "es-db-compare": "babel-node scripts/es-db-compare", - "data:export": "NODE_ENV=development LOG_LEVEL=info node --require dotenv/config --require babel-core/register scripts/data/export", - "data:import": "NODE_ENV=development LOG_LEVEL=info node --require dotenv/config --require babel-core/register scripts/data/import", - "local:run-docker": "docker-compose -f ./local/full/docker-compose.yml up -d", - "local:init": "npm run sync:all && npm run data:import", - "generate:doc:permissions": "babel-node scripts/permissions-doc", - "generate:doc:permissions:dev": "nodemon --watch scripts/permissions-doc --watch src --ext js,jsx,hbs --exec babel-node scripts/permissions-doc" + "startKafkaConsumers:dev": "cross-env NODE_ENV=development nodemon -w src --exec \"./node_modules/.bin/env-cmd npm run babel-node-script src/index-kafka.js\" | bunyan", + "test": "cross-env NODE_ENV=test npm run lint && cross-env NODE_ENV=test npm run reset:db && cross-env NODE_ENV=test npm run reset:es && cross-env NODE_ENV=test istanbul cover node_modules/mocha/bin/_mocha -- --timeout 10000 --require babel-core/register \"./src/**/*.spec.js*\" --exit", + "test:watch": "cross-env NODE_ENV=test mocha -w --require babel-core/register \"./src/**/*.spec.js*\" ", + "reset:db": "npm run babel-node-script -- migrations/sync.js", + "reset:es": "npm run babel-node-script -- migrations/elasticsearch_sync.js", + "import-from-api": "env-cmd npm run babel-node-script -- scripts/import-from-api", + "es-db-compare": "env-cmd npm run babel-node-script -- scripts/es-db-compare", + "data:export": "cross-env NODE_ENV=development LOG_LEVEL=info env-cmd npm run babel-node-script -- scripts/data/export", + "data:import": "cross-env NODE_ENV=development LOG_LEVEL=info env-cmd npm run babel-node-script -- scripts/data/import", + "services:up": "docker-compose -f ./local/full/docker-compose.yml up -d", + "services:down": "docker-compose -f ./local/full/docker-compose.yml down", + "services:logs": "docker-compose -f ./local/full/docker-compose.yml logs", + "local:init": "npm run local:reset && npm run data:import", + "local:reset": "env-cmd npm run reset:db && env-cmd npm run reset:es", + "babel-node-script": "node --require babel-core/register", + "generate:doc:permissions": "env-cmd npm run babel-node-script -- scripts/permissions-doc", + "generate:doc:permissions:dev": "nodemon --watch scripts/permissions-doc --watch src --ext js,jsx,hbs --exec \"./node_modules/.bin/env-cmd npm run babel-node-script -- scripts/permissions-doc\"" }, "repository": { "type": "git", @@ -57,13 +55,12 @@ "config": "^1.20.1", "continuation-local-storage": "^3.1.7", "cors": "^2.8.4", - "dotenv": "^8.2.0", "elasticsearch": "^16.1.1", "express": "^4.13.4", "express-list-routes": "^0.1.4", "express-request-id": "^1.1.0", "express-sanitizer": "^1.0.2", - "express-validation": "^0.6.0", + "express-validation": "^1.0.3", "handlebars": "^4.5.3", "http-aws-es": "^4.0.0", "joi": "^8.0.5", @@ -93,6 +90,8 @@ "bunyan": "^1.8.12", "chai": "^3.5.0", "chai-as-promised": "^7.1.1", + "cross-env": "^7.0.2", + "env-cmd": "^10.1.0", "eslint": "^6.8.0", "eslint-config-airbnb-base": "^11.1.0", "eslint-plugin-import": "^2.2.0", diff --git a/scripts/data/export/index.js b/scripts/data/export/index.js index 67687b23..95b4df13 100644 --- a/scripts/data/export/index.js +++ b/scripts/data/export/index.js @@ -31,26 +31,26 @@ logger.info('Script will export data to file:', filePath); // check if file exists if (fs.existsSync(filePath)) { // We delay question for overwrite file, because the question overlaps with a warning message from sequelize module -Promise.delay(1).then(() => { - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, + Promise.delay(1).then(() => { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + // confirm overwritting to file + rl.question( + 'File already exists, Are you sure to overwrite it? [Y] to overwrite: ', + (answer) => { + rl.close(); + if (answer.toLowerCase() === 'y') { + logger.info('File will be overwritten.'); + runExportData(filePath, logger); + } else { + logger.info('Exit without exporting any data'); + process.exit(0); + } + }, + ); // question() }); - // confirm overwritting to file - rl.question( - 'File already exists, Are you sure to overwrite it? [Y] to overwrite: ', - (answer) => { - rl.close(); - if (answer.toLowerCase() === 'y') { - logger.info('File will be overwritten.'); - runExportData(filePath, logger); - } else { - logger.info('Exit without exporting any data'); - process.exit(0); - } - }, - ); // question() -}); } else { // get base directory of the file const baseDir = path.resolve(filePath, '..'); diff --git a/scripts/es-db-compare/index.js b/scripts/es-db-compare/index.js index 8d4a56f4..7b4ef527 100644 --- a/scripts/es-db-compare/index.js +++ b/scripts/es-db-compare/index.js @@ -147,7 +147,7 @@ async function getProductTimelinesFromES() { }; return es.search(searchCriteria) .then((docs) => { - const rows = lodash.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle + const rows = lodash.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle return rows; }); } @@ -161,7 +161,7 @@ async function getProjectsFromES() { const searchCriteria = getESSearchCriteriaForProject(); const projects = await es.search(searchCriteria) .then((docs) => { - const rows = lodash.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle + const rows = lodash.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle return rows; }); const timelines = await getProductTimelinesFromES(); @@ -188,7 +188,7 @@ async function getMetadataFromES() { }; return es.search(searchCriteria) .then((docs) => { - const rows = lodash.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle + const rows = lodash.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle if (!rows.length) { return lodash.reduce( Object.keys(scriptConstants.associations.metadata), diff --git a/local/seed/index.js b/scripts/import-from-api/index.js similarity index 100% rename from local/seed/index.js rename to scripts/import-from-api/index.js diff --git a/local/seed/projects.json b/scripts/import-from-api/projects.json similarity index 100% rename from local/seed/projects.json rename to scripts/import-from-api/projects.json diff --git a/local/seed/seedMetadata.js b/scripts/import-from-api/seedMetadata.js similarity index 63% rename from local/seed/seedMetadata.js rename to scripts/import-from-api/seedMetadata.js index cf1049b3..bc081c95 100644 --- a/local/seed/seedMetadata.js +++ b/scripts/import-from-api/seedMetadata.js @@ -1,9 +1,9 @@ -const _ = require('lodash') +const _ = require('lodash'); const axios = require('axios'); const Promise = require('bluebird'); if (!process.env.CONNECT_USER_TOKEN) { - console.error('This script requires environment variable CONNECT_USER_TOKEN to be defined. Login to http://connect.topcoder-dev.com and get your user token from the requests headers.') + console.error('This script requires environment variable CONNECT_USER_TOKEN to be defined. Login to http://connect.topcoder-dev.com and get your user token from the requests headers.'); process.exit(1); } @@ -15,7 +15,7 @@ if (!process.env.CONNECT_USER_TOKEN) { * @param {Object} o object */ function dummifyPrices(o) { - Object.keys(o).forEach(function (k) { + Object.keys(o).forEach((k) => { if (o[k] !== null && typeof o[k] === 'object') { dummifyPrices(o[k]); return; @@ -32,128 +32,120 @@ function dummifyPrices(o) { // we need to know any logged in Connect user token to retrieve data from DEV const CONNECT_USER_TOKEN = process.env.CONNECT_USER_TOKEN; -var url = 'https://api.topcoder-dev.com/v5/projects/metadata'; +const url = 'https://api.topcoder-dev.com/v5/projects/metadata'; module.exports = (targetUrl, token) => { - var destUrl = targetUrl + 'projects/'; - var destTimelines = targetUrl; + const destUrl = `${targetUrl}projects/`; + const destTimelines = targetUrl; console.log('Getting metadata from DEV environment...'); return axios.get(url, { headers: { 'Content-Type': 'application/json', - 'Authorization': `Bearer ${CONNECT_USER_TOKEN}` - } + Authorization: `Bearer ${CONNECT_USER_TOKEN}`, + }, }) .catch((err) => { const errMessage = _.get(err, 'response.data.message'); - throw errMessage ? new Error('Error during obtaining data from DEV: ' + errMessage) : err + throw errMessage ? new Error(`Error during obtaining data from DEV: ${errMessage}`) : err; }) - .then(async function (response) { - let data = response.data; - dummifyPrices(data) + .then(async (response) => { + const data = response.data; + dummifyPrices(data); console.log('Creating metadata objects locally...'); - var headers = { + const headers = { 'Content-Type': 'application/json', - 'Authorization': 'Bearer ' + token - } + Authorization: `Bearer ${token}`, + }; - let promises + let promises; - promises = _(data.forms).orderBy(['key', 'asc'], ['version', 'asc']).map(pt=>{ + promises = _(data.forms).orderBy(['key', 'asc'], ['version', 'asc']).map((pt) => { const param = _.omit(pt, ['id', 'version', 'revision', 'key']); return axios - .post(destUrl + `metadata/form/${pt.key}/versions`, param, {headers:headers}) + .post(`${destUrl}metadata/form/${pt.key}/versions`, param, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create form with key=${pt.key} version=${pt.version}.`, errMessage) - }) + console.log(`Failed to create form with key=${pt.key} version=${pt.version}.`, errMessage); + }); }); await Promise.all(promises); - promises = _(data.planConfigs).orderBy(['key', 'asc'], ['version', 'asc']).map(pt=>{ + promises = _(data.planConfigs).orderBy(['key', 'asc'], ['version', 'asc']).map((pt) => { const param = _.omit(pt, ['id', 'version', 'revision', 'key']); return axios - .post(destUrl + `metadata/planConfig/${pt.key}/versions`, param, {headers:headers}) + .post(`${destUrl}metadata/planConfig/${pt.key}/versions`, param, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create planConfig with key=${pt.key} version=${pt.version}.`, errMessage) - }) + console.log(`Failed to create planConfig with key=${pt.key} version=${pt.version}.`, errMessage); + }); }); await Promise.all(promises); - promises = _(data.priceConfigs).orderBy(['key', 'asc'], ['version', 'asc']).map(pt=>{ + promises = _(data.priceConfigs).orderBy(['key', 'asc'], ['version', 'asc']).map((pt) => { const param = _.omit(pt, ['id', 'version', 'revision', 'key']); return axios - .post(destUrl + `metadata/priceConfig/${pt.key}/versions`, param, {headers:headers}) + .post(`${destUrl}metadata/priceConfig/${pt.key}/versions`, param, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create priceConfig with key=${pt.key} version=${pt.version}.`, errMessage) - }) + console.log(`Failed to create priceConfig with key=${pt.key} version=${pt.version}.`, errMessage); + }); }); await Promise.all(promises); - promises = _(data.projectTypes).map(pt=>{ - return axios - .post(destUrl+'metadata/projectTypes', pt, {headers:headers}) + promises = _(data.projectTypes).map(pt => axios + .post(`${destUrl}metadata/projectTypes`, pt, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create projectType with key=${pt.key}.`, errMessage) - }) - }); + console.log(`Failed to create projectType with key=${pt.key}.`, errMessage); + })); await Promise.all(promises); - promises = _(data.productCategories).map(pt=>{ - return axios - .post(destUrl+'metadata/productCategories', pt, {headers:headers}) + promises = _(data.productCategories).map(pt => axios + .post(`${destUrl}metadata/productCategories`, pt, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create productCategory with key=${pt.key}.`, errMessage) - }) - }); + console.log(`Failed to create productCategory with key=${pt.key}.`, errMessage); + })); await Promise.all(promises); - promises = _(data.projectTemplates).map(pt=>{ - return axios - .post(destUrl+'metadata/projectTemplates', pt, {headers:headers}) + promises = _(data.projectTemplates).map(pt => axios + .post(`${destUrl}metadata/projectTemplates`, pt, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create projectTemplate with id=${pt.id}.`, errMessage) - }) - }); + console.log(`Failed to create projectTemplate with id=${pt.id}.`, errMessage); + })); await Promise.all(promises); - promises = _(data.productTemplates).map(pt=>{ - return axios - .post(destUrl+'metadata/productTemplates', pt, {headers:headers}) + promises = _(data.productTemplates).map(pt => axios + .post(`${destUrl}metadata/productTemplates`, pt, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create productTemplate with id=${pt.id}.`, errMessage) - }) - }); + console.log(`Failed to create productTemplate with id=${pt.id}.`, errMessage); + })); await Promise.all(promises); - await Promise.each(data.milestoneTemplates,pt=> ( + await Promise.each(data.milestoneTemplates, pt => ( axios - .post(destTimelines+'timelines/metadata/milestoneTemplates', pt, {headers:headers}) + .post(`${destTimelines}timelines/metadata/milestoneTemplates`, pt, { headers }) .catch((err) => { const errMessage = _.get(err, 'response.data.message', ''); - console.log(`Failed to create milestoneTemplate with id=${pt.id}.`, errMessage) + console.log(`Failed to create milestoneTemplate with id=${pt.id}.`, errMessage); }) )); // handle success console.log('Done metadata seed'); - }).catch(err=>{ + }).catch((err) => { console.error(err && err.response ? err.response : err); }); -} +}; diff --git a/local/seed/seedProjects.js b/scripts/import-from-api/seedProjects.js similarity index 90% rename from local/seed/seedProjects.js rename to scripts/import-from-api/seedProjects.js index a84b82d8..e00eff78 100644 --- a/local/seed/seedProjects.js +++ b/scripts/import-from-api/seedProjects.js @@ -33,7 +33,7 @@ module.exports = (targetUrl, token) => { const invites = _.cloneDeep(_.get(project, 'invites')); const acceptInvitation = _.get(project, 'acceptInvitation'); - if(project.templateId) { + if (project.templateId) { await findProjectTemplate(project.templateId, targetUrl, adminHeaders).catch((ex) => { delete project.templateId; }); @@ -78,28 +78,28 @@ module.exports = (targetUrl, token) => { // creating invitations if (Array.isArray(invites)) { - let promises = [] - invites.forEach(invite => { - promises.push(createProjectMemberInvite(projectId, invite, targetUrl, connectAdminHeaders)) - }) + const promises = []; + invites.forEach((invite) => { + promises.push(createProjectMemberInvite(projectId, invite, targetUrl, connectAdminHeaders)); + }); // accepting invitations console.log(`Project #${projectId}: Wait a bit to give time ES to index before creating invitation...`); await Promise.delay(ES_INDEX_DELAY); - const responses = await Promise.all(promises) + const responses = await Promise.all(promises); if (acceptInvitation) { - let acceptInvitationPromises = [] - responses.forEach(response => { - const userId = _.get(response, 'data.success[0].userId') + const acceptInvitationPromises = []; + responses.forEach((response) => { + const userId = _.get(response, 'data.success[0].userId'); acceptInvitationPromises.push(updateProjectMemberInvite(projectId, { userId, - status: 'accepted' - }, targetUrl, connectAdminHeaders)) - }) + status: 'accepted', + }, targetUrl, connectAdminHeaders)); + }); console.log(`Project #${projectId}: Wait a bit to give time ES to index before accepting invitation...`); await Promise.delay(ES_INDEX_DELAY); - await Promise.all(acceptInvitationPromises) + await Promise.all(acceptInvitationPromises); } } @@ -140,7 +140,7 @@ function createProjectMemberInvite(projectId, params, targetUrl, headers) { .post(projectMemberInviteUrl, params, { headers }) .catch((err) => { console.log(`Failed to create project member invites ${projectId}: ${err.message}`); - }) + }); } function updateProjectMemberInvite(projectId, params, targetUrl, headers) { @@ -150,7 +150,7 @@ function updateProjectMemberInvite(projectId, params, targetUrl, headers) { .put(updateProjectMemberInviteUrl, params, { headers }) .catch((err) => { console.log(`Failed to update project member invites ${projectId}: ${err.message}`); - }) + }); } function findProjectTemplate(templateId, targetUrl, headers) { @@ -159,5 +159,5 @@ function findProjectTemplate(templateId, targetUrl, headers) { return axios({ url: projectTemplateUrl, headers, - }) + }); } diff --git a/src/constants.js b/src/constants.js index fb358a05..97b0371f 100644 --- a/src/constants.js +++ b/src/constants.js @@ -243,7 +243,7 @@ export const CONNECT_NOTIFICATION_EVENT = { MILESTONE_TRANSITION_ACTIVE: 'connect.notification.project.timeline.milestone.transition.active', // When milestone is marked as completed MILESTONE_TRANSITION_COMPLETED: 'connect.notification.project.timeline.milestone.transition.completed', - // When milestone is marked as paused + // When milestone is marked as paused MILESTONE_TRANSITION_PAUSED: 'connect.notification.project.timeline.milestone.transition.paused', // When milestone is waiting for customers's input MILESTONE_WAITING_CUSTOMER: 'connect.notification.project.timeline.milestone.waiting.customer', @@ -268,17 +268,24 @@ export const REGEX = { }; export const M2M_SCOPES = { + // for backward compatibility we should allow ALL M2M operations with `CONNECT_PROJECT_ADMIN` CONNECT_PROJECT_ADMIN: 'all:connect_project', PROJECTS: { ALL: 'all:projects', READ: 'read:projects', WRITE: 'write:projects', + WRITE_BILLING_ACCOUNTS: 'write:projects-billing-accounts', }, PROJECT_MEMBERS: { ALL: 'all:project-members', READ: 'read:project-members', WRITE: 'write:project-members', }, + PROJECT_INVITES: { + ALL: 'all:project-invites', + READ: 'read:project-invites', + WRITE: 'write:project-invites', + }, }; export const TIMELINE_REFERENCES = { diff --git a/src/events/busApi.js b/src/events/busApi.js index a6af87c6..7b01e055 100644 --- a/src/events/busApi.js +++ b/src/events/busApi.js @@ -1,5 +1,4 @@ import _ from 'lodash'; -import moment from 'moment'; import config from 'config'; import { EVENT, @@ -129,7 +128,7 @@ module.exports = (app, logger) => { // send PROJECT_UPDATED Kafka message when one of the specified below properties changed const watchProperties = ['status', 'details', 'name', 'description', 'bookmarks']; if (!_.isEqual(_.pick(original, watchProperties), - _.pick(updated, watchProperties))) { + _.pick(updated, watchProperties))) { createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, { projectId: updated.id, projectName: updated.name, @@ -153,7 +152,7 @@ module.exports = (app, logger) => { /** * PROJECT_METADATA_CREATE */ - app.on(EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive PROJECT_METADATA_CREATE event'); // send event to bus api @@ -163,7 +162,7 @@ module.exports = (app, logger) => { /** * PROJECT_METADATA_UPDATE */ - app.on(EVENT.ROUTING_KEY.PROJECT_METADATA_UPDATE, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.PROJECT_METADATA_UPDATE, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive PROJECT_METADATA_UPDATE event'); createEvent(BUS_API_EVENT.PROJECT_METADATA_UPDATE, resource, logger); @@ -172,7 +171,7 @@ module.exports = (app, logger) => { /** * PROJECT_METADATA_DELETE */ - app.on(EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive PROJECT_METADATA_DELETE event'); createEvent(BUS_API_EVENT.PROJECT_METADATA_DELETE, resource, logger); @@ -227,7 +226,7 @@ module.exports = (app, logger) => { userId: member.userId, initiatorUserId: req.authUser.userId, }, logger); - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -273,7 +272,7 @@ module.exports = (app, logger) => { initiatorUserId: req.authUser.userId, }, logger); } - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -316,7 +315,7 @@ module.exports = (app, logger) => { initiatorUserId: req.authUser.userId, }, logger); } - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -370,7 +369,7 @@ module.exports = (app, logger) => { userId: req.authUser.userId, initiatorUserId: req.authUser.userId, }, logger); - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -389,16 +388,16 @@ module.exports = (app, logger) => { models.Project.findOne({ where: { id: projectId }, }) - .then((project) => { - createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_ATTACHMENT_UPDATED, { - projectId: project.id, - projectName: project.name, - refCode: _.get(project, 'details.utm.code'), - projectUrl: connectProjectUrl(project.id), - userId: req.authUser.userId, - initiatorUserId: req.authUser.userId, - }, logger); - }).catch(err => null); // eslint-disable-line no-unused-vars + .then((project) => { + createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_ATTACHMENT_UPDATED, { + projectId: project.id, + projectName: project.name, + refCode: _.get(project, 'details.utm.code'), + projectUrl: connectProjectUrl(project.id), + userId: req.authUser.userId, + initiatorUserId: req.authUser.userId, + }, logger); + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -417,16 +416,16 @@ module.exports = (app, logger) => { models.Project.findOne({ where: { id: projectId }, }) - .then((project) => { - createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_ATTACHMENT_UPDATED, { - projectId: project.id, - projectName: project.name, - refCode: _.get(project, 'details.utm.code'), - projectUrl: connectProjectUrl(project.id), - userId: req.authUser.userId, - initiatorUserId: req.authUser.userId, - }, logger); - }).catch(err => null); // eslint-disable-line no-unused-vars + .then((project) => { + createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_ATTACHMENT_UPDATED, { + projectId: project.id, + projectName: project.name, + refCode: _.get(project, 'details.utm.code'), + projectUrl: connectProjectUrl(project.id), + userId: req.authUser.userId, + initiatorUserId: req.authUser.userId, + }, logger); + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -488,7 +487,7 @@ module.exports = (app, logger) => { util.getTopcoderProjectMembers(project.members) : null, }, logger); return sendPlanReadyEventIfNeeded(req, project, created); - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -517,9 +516,9 @@ module.exports = (app, logger) => { userId: req.authUser.userId, initiatorUserId: req.authUser.userId, allowedUsers: deleted.status === PROJECT_PHASE_STATUS.DRAFT ? - util.getTopcoderProjectMembers(project.members) : null, + util.getTopcoderProjectMembers(project.members) : null, }, logger); - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -549,27 +548,27 @@ module.exports = (app, logger) => { ['duration', CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED], ['startDate', CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED], ['spentBudget', route === ROUTES.PHASES.UPDATE - ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PAYMENT - : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PAYMENT, + ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PAYMENT + : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PAYMENT, ], ['progress', [route === ROUTES.PHASES.UPDATE - ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PROGRESS - : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PROGRESS, - CONNECT_NOTIFICATION_EVENT.PROJECT_PROGRESS_MODIFIED, + ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PROGRESS + : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PROGRESS, + CONNECT_NOTIFICATION_EVENT.PROJECT_PROGRESS_MODIFIED, ]], ['details', route === ROUTES.PHASES.UPDATE - ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_SCOPE - : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_SCOPE, + ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_SCOPE + : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_SCOPE, ], ['status', route === ROUTES.PHASES.UPDATE - ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_ACTIVE - : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_ACTIVE, - PROJECT_PHASE_STATUS.ACTIVE, + ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_ACTIVE + : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_ACTIVE, + PROJECT_PHASE_STATUS.ACTIVE, ], ['status', route === ROUTES.PHASES.UPDATE - ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_COMPLETED - : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_COMPLETED, - PROJECT_PHASE_STATUS.COMPLETED, + ? CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_COMPLETED + : CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_COMPLETED, + PROJECT_PHASE_STATUS.COMPLETED, ], // ideally we should validate the old value being 'DRAFT' but there is no other status from which // we can move phase to REVIEWED status @@ -596,14 +595,14 @@ module.exports = (app, logger) => { userId: req.authUser.userId, initiatorUserId: req.authUser.userId, allowedUsers: updated.status === PROJECT_PHASE_STATUS.DRAFT ? - util.getTopcoderProjectMembers(project.members) : null, + util.getTopcoderProjectMembers(project.members) : null, }, logger)); events.forEach((event) => { eventsMap[event] = true; }); } }); return sendPlanReadyEventIfNeeded(req, project, updated); - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars } }); @@ -677,7 +676,7 @@ module.exports = (app, logger) => { /** * MILESTONE_ADDED. */ - app.on(EVENT.ROUTING_KEY.MILESTONE_ADDED, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.MILESTONE_ADDED, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive MILESTONE_ADDED event'); createEvent(BUS_API_EVENT.MILESTONE_ADDED, resource, logger); @@ -705,7 +704,7 @@ module.exports = (app, logger) => { } // sendMilestoneNotification(req, {}, created, project); }) - .catch(err => null); // eslint-disable-line no-unused-vars + .catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -715,9 +714,8 @@ module.exports = (app, logger) => { req, resource, originalResource, - cascadedUpdates, skipNotification, - }) => { // eslint-disable-line no-unused-vars + }) => { // eslint-disable-line no-unused-vars logger.debug(`receive MILESTONE_UPDATED event for milestone ${resource.id}`); createEvent(BUS_API_EVENT.MILESTONE_UPDATED, resource, logger); @@ -734,48 +732,42 @@ module.exports = (app, logger) => { models.Project.findOne({ where: { id: projectId }, }) - .then((project) => { - logger.debug(`Found project with id ${projectId}`); - return models.Milestone.getTimelineDuration(timeline.id) - .then(({ duration, progress }) => { - timeline.duration = duration; - timeline.progress = progress; - sendMilestoneNotification(req, original, updated, project, timeline); - - logger.debug('cascadedUpdates', cascadedUpdates); - if (cascadedUpdates && cascadedUpdates.milestones && cascadedUpdates.milestones.length > 0) { - _.each(cascadedUpdates.milestones, cascadedUpdate => - sendMilestoneNotification(req, cascadedUpdate.original, cascadedUpdate.updated, project, timeline), - ); - } - - // if timeline is modified - if (cascadedUpdates && cascadedUpdates.timeline) { - const cTimeline = cascadedUpdates.timeline; - // if endDate of the timeline is modified, raise TIMELINE_ADJUSTED event - if (!moment(cTimeline.original.endDate).isSame(cTimeline.updated.endDate)) { - // Raise Timeline changed event - createEvent(CONNECT_NOTIFICATION_EVENT.TIMELINE_ADJUSTED, { - projectId: project.id, - projectName: project.name, - refCode: _.get(project, 'details.utm.code'), - projectUrl: connectProjectUrl(project.id), - originalTimeline: cTimeline.original, - updatedTimeline: cTimeline.updated, - userId: req.authUser.userId, - initiatorUserId: req.authUser.userId, - }, logger); - } - } - }); - }).catch(err => null); // eslint-disable-line no-unused-vars + .then((project) => { + logger.debug(`Found project with id ${projectId}`); + return models.Milestone.getTimelineDuration(timeline.id) + .then(({ duration, progress }) => { + timeline.duration = duration; + timeline.progress = progress; + sendMilestoneNotification(req, original, updated, project, timeline); + + // TODO raise this event again + // if timeline is modified + /* if (cascadedUpdates && cascadedUpdates.timeline) { + const cTimeline = cascadedUpdates.timeline; + // if endDate of the timeline is modified, raise TIMELINE_ADJUSTED event + if (!moment(cTimeline.original.endDate).isSame(cTimeline.updated.endDate)) { + // Raise Timeline changed event + createEvent(CONNECT_NOTIFICATION_EVENT.TIMELINE_ADJUSTED, { + projectId: project.id, + projectName: project.name, + refCode: _.get(project, 'details.utm.code'), + projectUrl: connectProjectUrl(project.id), + originalTimeline: cTimeline.original, + updatedTimeline: cTimeline.updated, + userId: req.authUser.userId, + initiatorUserId: req.authUser.userId, + }, logger); + } + } */ + }); + }).catch(err => null); // eslint-disable-line no-unused-vars } }); - /** + /** * MILESTONE_REMOVED. */ - app.on(EVENT.ROUTING_KEY.MILESTONE_REMOVED, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.MILESTONE_REMOVED, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive MILESTONE_REMOVED event'); createEvent(BUS_API_EVENT.MILESTONE_REMOVED, resource, logger); @@ -789,19 +781,19 @@ module.exports = (app, logger) => { models.Project.findOne({ where: { id: projectId }, }) - .then((project) => { - if (project) { - createEvent(CONNECT_NOTIFICATION_EVENT.MILESTONE_REMOVED, { - projectId, - projectName: project.name, - refCode: _.get(project, 'details.utm.code'), - projectUrl: connectProjectUrl(projectId), - removedMilestone: deleted, - userId: req.authUser.userId, - initiatorUserId: req.authUser.userId, - }, logger); - } - }).catch(err => null); // eslint-disable-line no-unused-vars + .then((project) => { + if (project) { + createEvent(CONNECT_NOTIFICATION_EVENT.MILESTONE_REMOVED, { + projectId, + projectName: project.name, + refCode: _.get(project, 'details.utm.code'), + projectUrl: connectProjectUrl(projectId), + removedMilestone: deleted, + userId: req.authUser.userId, + initiatorUserId: req.authUser.userId, + }, logger); + } + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** @@ -822,7 +814,7 @@ module.exports = (app, logger) => { createEvent(BUS_API_EVENT.MILESTONE_TEMPLATE_UPDATED, resource, logger); }); - /** + /** * MILESTONE_TEMPLATE_REMOVED. */ app.on(EVENT.ROUTING_KEY.MILESTONE_TEMPLATE_REMOVED, ({ req, resource }) => { // eslint-disable-line no-unused-vars @@ -865,27 +857,27 @@ module.exports = (app, logger) => { // send PROJECT_UPDATED Kafka message when one of the specified below properties changed const watchProperties = ['startDate', 'endDate']; if (!_.isEqual(_.pick(original, watchProperties), - _.pick(updated, watchProperties))) { + _.pick(updated, watchProperties))) { // req.params.projectId is set by validateTimelineIdParam middleware const projectId = _.parseInt(req.params.projectId); models.Project.findOne({ where: { id: projectId }, }) - .then((project) => { - if (project) { - createEvent(CONNECT_NOTIFICATION_EVENT.TIMELINE_ADJUSTED, { - projectId, - projectName: project.name, - refCode: _.get(project, 'details.utm.code'), - projectUrl: connectProjectUrl(projectId), - originalTimeline: original, - updatedTimeline: updated, - userId: req.authUser.userId, - initiatorUserId: req.authUser.userId, - }, logger); - } - }).catch(err => null); // eslint-disable-line no-unused-vars + .then((project) => { + if (project) { + createEvent(CONNECT_NOTIFICATION_EVENT.TIMELINE_ADJUSTED, { + projectId, + projectName: project.name, + refCode: _.get(project, 'details.utm.code'), + projectUrl: connectProjectUrl(projectId), + originalTimeline: original, + updatedTimeline: updated, + userId: req.authUser.userId, + initiatorUserId: req.authUser.userId, + }, logger); + } + }).catch(err => null); // eslint-disable-line no-unused-vars } }); @@ -931,8 +923,8 @@ module.exports = (app, logger) => { logger.debug(`Spec changed for product id ${updated.id}`); const busApiEvent = route === ROUTES.PHASE_PRODUCTS.UPDATE - ? CONNECT_NOTIFICATION_EVENT.PROJECT_PRODUCT_SPECIFICATION_MODIFIED - : CONNECT_NOTIFICATION_EVENT.PROJECT_WORKITEM_SPECIFICATION_MODIFIED; + ? CONNECT_NOTIFICATION_EVENT.PROJECT_PRODUCT_SPECIFICATION_MODIFIED + : CONNECT_NOTIFICATION_EVENT.PROJECT_WORKITEM_SPECIFICATION_MODIFIED; createEvent(busApiEvent, { projectId, @@ -946,7 +938,7 @@ module.exports = (app, logger) => { const watchProperties = ['name', 'estimatedPrice', 'actualPrice', 'details']; if (!_.isEqual(_.pick(original, watchProperties), - _.pick(updated, watchProperties))) { + _.pick(updated, watchProperties))) { createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, { projectId, projectName: project.name, @@ -955,16 +947,16 @@ module.exports = (app, logger) => { userId: req.authUser.userId, initiatorUserId: req.authUser.userId, allowedUsers: updated.status === PROJECT_PHASE_STATUS.DRAFT ? - util.getTopcoderProjectMembers(project.members) : null, + util.getTopcoderProjectMembers(project.members) : null, }, logger); } - }).catch(err => null); // eslint-disable-line no-unused-vars + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** * PROJECT_MEMBER_INVITE_CREATED */ - app.on(EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_CREATED, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_CREATED, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive PROJECT_MEMBER_INVITE_CREATED event'); createEvent(BUS_API_EVENT.PROJECT_MEMBER_INVITE_CREATED, resource, logger); @@ -981,43 +973,43 @@ module.exports = (app, logger) => { models.Project.findOne({ where: { id: projectId }, }) - .then((project) => { - logger.debug(util.isSSO); - if (status === INVITE_STATUS.REQUESTED) { - createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_REQUESTED, { - projectId, - userId, - email, - role, - initiatorUserId: req.authUser.userId, - isSSO: util.isSSO(project), - }, logger); - } else { + .then((project) => { + logger.debug(util.isSSO); + if (status === INVITE_STATUS.REQUESTED) { + createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_REQUESTED, { + projectId, + userId, + email, + role, + initiatorUserId: req.authUser.userId, + isSSO: util.isSSO(project), + }, logger); + } else { // send event to bus api - logger.debug({ - projectId, - userId, - email, - role, - initiatorUserId: req.authUser.userId, - isSSO: util.isSSO(project), - }); - createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_CREATED, { - projectId, - userId, - email, - role, - initiatorUserId: req.authUser.userId, - isSSO: util.isSSO(project), - }, logger); - } - }).catch(err => logger.error(err)); // eslint-disable-line no-unused-vars + logger.debug({ + projectId, + userId, + email, + role, + initiatorUserId: req.authUser.userId, + isSSO: util.isSSO(project), + }); + createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_CREATED, { + projectId, + userId, + email, + role, + initiatorUserId: req.authUser.userId, + isSSO: util.isSSO(project), + }, logger); + } + }).catch(err => logger.error(err)); // eslint-disable-line no-unused-vars }); /** * PROJECT_MEMBER_INVITE_UPDATED */ - app.on(EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_UPDATED, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_UPDATED, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive PROJECT_MEMBER_INVITE_UPDATED event'); createEvent(BUS_API_EVENT.PROJECT_MEMBER_INVITE_UPDATED, resource, logger); @@ -1035,51 +1027,51 @@ module.exports = (app, logger) => { models.Project.findOne({ where: { id: projectId }, }) - .then((project) => { - logger.debug(util.isSSO); - if (status === INVITE_STATUS.REQUEST_APPROVED) { + .then((project) => { + logger.debug(util.isSSO); + if (status === INVITE_STATUS.REQUEST_APPROVED) { // send event to bus api - createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_APPROVED, { - projectId, - userId, - originator: createdBy, - email, - role, - status, - initiatorUserId: req.authUser.userId, - isSSO: util.isSSO(project), - }, logger); - } else if (status === INVITE_STATUS.REQUEST_REJECTED) { + createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_APPROVED, { + projectId, + userId, + originator: createdBy, + email, + role, + status, + initiatorUserId: req.authUser.userId, + isSSO: util.isSSO(project), + }, logger); + } else if (status === INVITE_STATUS.REQUEST_REJECTED) { // send event to bus api - createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_REJECTED, { - projectId, - userId, - originator: createdBy, - email, - role, - status, - initiatorUserId: req.authUser.userId, - isSSO: util.isSSO(project), - }, logger); - } else { + createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_REJECTED, { + projectId, + userId, + originator: createdBy, + email, + role, + status, + initiatorUserId: req.authUser.userId, + isSSO: util.isSSO(project), + }, logger); + } else { // send event to bus api - createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_UPDATED, { - projectId, - userId, - email, - role, - status, - initiatorUserId: req.authUser.userId, - isSSO: util.isSSO(project), - }, logger); - } - }).catch(err => null); // eslint-disable-line no-unused-vars + createEvent(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_UPDATED, { + projectId, + userId, + email, + role, + status, + initiatorUserId: req.authUser.userId, + isSSO: util.isSSO(project), + }, logger); + } + }).catch(err => null); // eslint-disable-line no-unused-vars }); /** * PROJECT_MEMBER_INVITE_REMOVED */ - app.on(EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_REMOVED, ({ req, resource }) => { // eslint-disable-line no-unused-vars + app.on(EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_REMOVED, ({ req, resource }) => { // eslint-disable-line no-unused-vars logger.debug('receive PROJECT_MEMBER_INVITE_REMOVED event'); createEvent(BUS_API_EVENT.PROJECT_MEMBER_INVITE_REMOVED, resource, logger); diff --git a/src/events/index.js b/src/events/index.js index 5304010a..b1757dec 100644 --- a/src/events/index.js +++ b/src/events/index.js @@ -10,8 +10,6 @@ import { timelineAdjustedKafkaHandler, } from './timelines'; import { - milestoneAddedHandler, - milestoneUpdatedHandler, milestoneUpdatedKafkaHandler, } from './milestones'; @@ -66,9 +64,9 @@ export const rabbitHandlers = { [EVENT.ROUTING_KEY.TIMELINE_ADDED]: voidRabbitHandler, // DISABLED [EVENT.ROUTING_KEY.TIMELINE_REMOVED]: voidRabbitHandler, // DISABLED [EVENT.ROUTING_KEY.TIMELINE_UPDATED]: voidRabbitHandler, // DISABLED - [EVENT.ROUTING_KEY.MILESTONE_ADDED]: milestoneAddedHandler, // index in ES because of cascade updates + [EVENT.ROUTING_KEY.MILESTONE_ADDED]: voidRabbitHandler, // DISABLED [EVENT.ROUTING_KEY.MILESTONE_REMOVED]: voidRabbitHandler, // DISABLED - [EVENT.ROUTING_KEY.MILESTONE_UPDATED]: milestoneUpdatedHandler, // index in ES because of cascade updates + [EVENT.ROUTING_KEY.MILESTONE_UPDATED]: voidRabbitHandler, // DISABLED }; export const kafkaHandlers = { diff --git a/src/events/milestones/index.js b/src/events/milestones/index.js index 8b717662..03134ebb 100644 --- a/src/events/milestones/index.js +++ b/src/events/milestones/index.js @@ -86,7 +86,7 @@ const milestoneUpdatedHandler = Promise.coroutine(function* (logger, msg, channe // if timeline has been modified during milestones updates if (data.cascadedUpdates && data.cascadedUpdates.timeline && data.cascadedUpdates.timeline.updated) { // merge updated timeline with the object in ES index, the same way as we do when updating timeline in ES using timeline endpoints - updatedTimeline = _.merge(doc._source, data.cascadedUpdates.timeline.updated); // eslint-disable-line no-underscore-dangle + updatedTimeline = _.merge(doc._source, data.cascadedUpdates.timeline.updated); // eslint-disable-line no-underscore-dangle } const merged = _.assign(updatedTimeline, { milestones }); @@ -119,7 +119,7 @@ const milestoneRemovedHandler = Promise.coroutine(function* (logger, msg, channe try { const doc = yield eClient.get({ index: ES_TIMELINE_INDEX, type: ES_TIMELINE_TYPE, id: data.timelineId }); const milestones = _.filter(doc._source.milestones, single => single.id !== data.id); // eslint-disable-line no-underscore-dangle - const merged = _.assign(doc._source, { milestones }); // eslint-disable-line no-underscore-dangle + const merged = _.assign(doc._source, { milestones }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_TIMELINE_INDEX, type: ES_TIMELINE_TYPE, diff --git a/src/events/phaseProducts/index.js b/src/events/phaseProducts/index.js index b6b6c063..3322d78e 100644 --- a/src/events/phaseProducts/index.js +++ b/src/events/phaseProducts/index.js @@ -24,7 +24,7 @@ const phaseProductAddedHandler = Promise.coroutine(function* (logger, msg, chann try { const data = JSON.parse(msg.content.toString()); const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.projectId }); - const phases = _.isArray(doc._source.phases) ? doc._source.phases : []; // eslint-disable-line no-underscore-dangle + const phases = _.isArray(doc._source.phases) ? doc._source.phases : []; // eslint-disable-line no-underscore-dangle _.each(phases, (phase) => { if (phase.id === data.phaseId) { @@ -33,7 +33,7 @@ const phaseProductAddedHandler = Promise.coroutine(function* (logger, msg, chann } }); - const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle + const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.projectId, body: { doc: merged } }); logger.debug('phase product added to project document successfully'); channel.ack(msg); @@ -55,7 +55,7 @@ const phaseProductUpdatedHandler = Promise.coroutine(function* (logger, msg, cha try { const data = JSON.parse(msg.content.toString()); const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.original.projectId }); - const phases = _.map(doc._source.phases, (phase) => { // eslint-disable-line no-underscore-dangle + const phases = _.map(doc._source.phases, (phase) => { // eslint-disable-line no-underscore-dangle if (phase.id === data.original.phaseId) { phase.products = _.map(phase.products, (product) => { // eslint-disable-line no-param-reassign if (product.id === data.original.id) { @@ -66,7 +66,7 @@ const phaseProductUpdatedHandler = Promise.coroutine(function* (logger, msg, cha } return phase; }); - const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle + const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, @@ -95,14 +95,14 @@ const phaseProductRemovedHandler = Promise.coroutine(function* (logger, msg, cha try { const data = JSON.parse(msg.content.toString()); const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.projectId }); - const phases = _.map(doc._source.phases, (phase) => { // eslint-disable-line no-underscore-dangle + const phases = _.map(doc._source.phases, (phase) => { // eslint-disable-line no-underscore-dangle if (phase.id === data.phaseId) { phase.products = _.filter(phase.products, product => product.id !== data.id); // eslint-disable-line no-param-reassign } return phase; }); - const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle + const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_PROJECT_INDEX, diff --git a/src/events/projectAttachments/index.js b/src/events/projectAttachments/index.js index b7f100c1..c964e960 100644 --- a/src/events/projectAttachments/index.js +++ b/src/events/projectAttachments/index.js @@ -24,9 +24,9 @@ const projectAttachmentAddedHandler = Promise.coroutine(function* (logger, msg, try { const data = JSON.parse(msg.content.toString()); const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.projectId }); - const attachments = _.isArray(doc._source.attachments) ? doc._source.attachments : []; // eslint-disable-line no-underscore-dangle + const attachments = _.isArray(doc._source.attachments) ? doc._source.attachments : []; // eslint-disable-line no-underscore-dangle attachments.push(data); - const merged = _.merge(doc._source, { attachments }); // eslint-disable-line no-underscore-dangle + const merged = _.merge(doc._source, { attachments }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.projectId, body: { doc: merged } }); logger.debug('project attachment added to project document successfully'); channel.ack(msg); @@ -48,13 +48,13 @@ const projectAttachmentUpdatedHandler = Promise.coroutine(function* (logger, msg try { const data = JSON.parse(msg.content.toString()); const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.original.projectId }); - const attachments = _.map(doc._source.attachments, (single) => { // eslint-disable-line no-underscore-dangle + const attachments = _.map(doc._source.attachments, (single) => { // eslint-disable-line no-underscore-dangle if (single.id === data.original.id) { return _.merge(single, data.updated); } return single; }); - const merged = _.merge(doc._source, { attachments }); // eslint-disable-line no-underscore-dangle + const merged = _.merge(doc._source, { attachments }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, @@ -83,8 +83,8 @@ const projectAttachmentRemovedHandler = Promise.coroutine(function* (logger, msg try { const data = JSON.parse(msg.content.toString()); const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.projectId }); - const attachments = _.filter(doc._source.attachments, single => single.id !== data.id); // eslint-disable-line no-underscore-dangle - const merged = _.merge(doc._source, { attachments }); // eslint-disable-line no-underscore-dangle + const attachments = _.filter(doc._source.attachments, single => single.id !== data.id); // eslint-disable-line no-underscore-dangle + const merged = _.merge(doc._source, { attachments }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, diff --git a/src/events/projectMembers/index.js b/src/events/projectMembers/index.js index 2b6868a6..b0dd780a 100644 --- a/src/events/projectMembers/index.js +++ b/src/events/projectMembers/index.js @@ -20,7 +20,7 @@ const updateESPromise = Promise.coroutine(function* a(logger, requestId, project id: projectId, body: { doc: updatedDoc }, }) - .then(() => logger.debug('elasticsearch project document updated successfully')); + .then(() => logger.debug('elasticsearch project document updated successfully')); } catch (error) { logger.error('Error caught updating ES document', error); return Promise.reject(error); @@ -76,8 +76,8 @@ const projectMemberRemovedHandler = Promise.coroutine(function* (logger, msg, ch const member = JSON.parse(msg.content.toString()); const projectId = member.projectId; const updateDocPromise = (doc) => { - const members = _.filter(doc._source.members, single => single.id !== member.id); // eslint-disable-line no-underscore-dangle - return Promise.resolve(_.set(doc._source, 'members', members)); // eslint-disable-line no-underscore-dangle + const members = _.filter(doc._source.members, single => single.id !== member.id); // eslint-disable-line no-underscore-dangle + return Promise.resolve(_.set(doc._source, 'members', members)); // eslint-disable-line no-underscore-dangle }; yield Promise.all([ updateESPromise(logger, origRequestId, projectId, updateDocPromise), @@ -107,13 +107,13 @@ const projectMemberUpdatedHandler = Promise.coroutine(function* a(logger, msg, c const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.original.projectId }); // merge the changes and update the elasticsearch index - const members = _.map(doc._source.members, (single) => { // eslint-disable-line no-underscore-dangle + const members = _.map(doc._source.members, (single) => { // eslint-disable-line no-underscore-dangle if (single.id === data.original.id) { return _.merge(single, payload); } return single; }); - const merged = _.merge(doc._source, { members }); // eslint-disable-line no-underscore-dangle + const merged = _.merge(doc._source, { members }); // eslint-disable-line no-underscore-dangle // update the merged document yield eClient.update({ index: ES_PROJECT_INDEX, diff --git a/src/events/projectPhases/index.js b/src/events/projectPhases/index.js index ec5c21b0..bb885f4d 100644 --- a/src/events/projectPhases/index.js +++ b/src/events/projectPhases/index.js @@ -249,7 +249,7 @@ const removePhaseFromIndex = Promise.coroutine(function* (logger, msg) { // esli const phase = _.get(data, 'deleted', {}); const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: phase.projectId }); const phases = _.filter(doc._source.phases, single => single.id !== phase.id); // eslint-disable-line no-underscore-dangle - const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle + const merged = _.assign(doc._source, { phases }); // eslint-disable-line no-underscore-dangle yield eClient.update({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, diff --git a/src/events/projects/index.js b/src/events/projects/index.js index e12db136..99d5c845 100644 --- a/src/events/projects/index.js +++ b/src/events/projects/index.js @@ -115,7 +115,7 @@ const projectUpdatedHandler = Promise.coroutine(function* (logger, msg, channel) try { // first get the existing document and than merge the updated changes and save the new document const doc = yield eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: data.original.id }); - const merged = _.merge(doc._source, data.updated); // eslint-disable-line no-underscore-dangle + const merged = _.merge(doc._source, data.updated); // eslint-disable-line no-underscore-dangle // update the merged document yield eClient.update({ index: ES_PROJECT_INDEX, @@ -198,7 +198,7 @@ async function projectUpdatedKafkaHandler(app, topic, payload) { try { const doc = await eClient.get({ index: ES_PROJECT_INDEX, type: ES_PROJECT_TYPE, id: previousValue.id }); console.log(doc._source, 'Received project from ES');// eslint-disable-line no-underscore-dangle - const merged = _.merge(doc._source, project.get({ plain: true })); // eslint-disable-line no-underscore-dangle + const merged = _.merge(doc._source, project.get({ plain: true })); // eslint-disable-line no-underscore-dangle console.log(merged, 'Merged project'); // update the merged document await eClient.update({ diff --git a/src/events/timelines/index.js b/src/events/timelines/index.js index 39ed0636..609a5a79 100644 --- a/src/events/timelines/index.js +++ b/src/events/timelines/index.js @@ -60,7 +60,7 @@ const timelineUpdatedHandler = Promise.coroutine(function* (logger, msg, channel try { // first get the existing document and than merge the updated changes and save the new document const doc = yield eClient.get({ index: ES_TIMELINE_INDEX, type: ES_TIMELINE_TYPE, id: data.original.id }); - const merged = _.merge(doc._source, data.updated); // eslint-disable-line no-underscore-dangle + const merged = _.merge(doc._source, data.updated); // eslint-disable-line no-underscore-dangle merged.milestones = data.updated.milestones; // update the merged document yield eClient.update({ diff --git a/src/mocks/direct.js b/src/mocks/direct.js index 2b7df972..65b86280 100644 --- a/src/mocks/direct.js +++ b/src/mocks/direct.js @@ -51,65 +51,65 @@ const projects = { // Register all the routes router.route('/v3/direct/projects') - .get((req, res) => { - app.logger.info('get direct projects'); - res.json(util.wrapResponse(req.id, { projects })); - }) - .post((freq, res) => { - const req = freq; - app.logger.info({ body: req.body }, 'create direct project'); - const newId = projectId + 1; - req.body.id = newId; - projects[newId] = req.body; - res.json(util.wrapResponse(req.id, { projectId: newId })); - }); + .get((req, res) => { + app.logger.info('get direct projects'); + res.json(util.wrapResponse(req.id, { projects })); + }) + .post((freq, res) => { + const req = freq; + app.logger.info({ body: req.body }, 'create direct project'); + const newId = projectId + 1; + req.body.id = newId; + projects[newId] = req.body; + res.json(util.wrapResponse(req.id, { projectId: newId })); + }); router.route('/v3/direct/projects/:projectId(\\d+)/billingaccount') - .post((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'add billingaccount to Project'); - if (projects[pId]) { - projects[pId] = _.merge(projects[pId], req.body); - res.json(util.wrapResponse(req.id, { billingAccountName: 'mock account name for ' + + .post((req, res) => { + const pId = req.params.projectId; + app.logger.info({ body: req.body, pId }, 'add billingaccount to Project'); + if (projects[pId]) { + projects[pId] = _.merge(projects[pId], req.body); + res.json(util.wrapResponse(req.id, { billingAccountName: 'mock account name for ' + `${req.body.billingAccountId}` })); - } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); - } - }); + } else { + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + } + }); router.route('/v3/direct/projects/:projectId(\\d+)/copilot') - .post((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'add copilot to Project'); - if (projects[pId]) { - projects[pId] = _.merge(projects[pId], req.body); - res.json(util.wrapResponse(req.id, { copilotProjectId: pId })); - } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); - } - }) - .delete((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'remove copilot from Project'); - if (projects[pId]) { - projects[pId] = _.omit(projects[pId], 'copilotUserId'); - res.json(util.wrapResponse(req.id, true)); - } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); - } - }); + .post((req, res) => { + const pId = req.params.projectId; + app.logger.info({ body: req.body, pId }, 'add copilot to Project'); + if (projects[pId]) { + projects[pId] = _.merge(projects[pId], req.body); + res.json(util.wrapResponse(req.id, { copilotProjectId: pId })); + } else { + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + } + }) + .delete((req, res) => { + const pId = req.params.projectId; + app.logger.info({ body: req.body, pId }, 'remove copilot from Project'); + if (projects[pId]) { + projects[pId] = _.omit(projects[pId], 'copilotUserId'); + res.json(util.wrapResponse(req.id, true)); + } else { + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + } + }); router.route('/v3/direct/projects/:projectId(\\d+)/permissions') - .post((req, res) => { - const pId = req.params.projectId; - app.logger.info({ body: req.body, pId }, 'add permissions to Project'); - if (projects[pId]) { - res.json(); - } else { - res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); - } - }); + .post((req, res) => { + const pId = req.params.projectId; + app.logger.info({ body: req.body, pId }, 'add permissions to Project'); + if (projects[pId]) { + res.json(); + } else { + res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`)); + } + }); app.use(router); diff --git a/src/models/milestone.js b/src/models/milestone.js index 644f7b0c..2e242cd2 100644 --- a/src/models/milestone.js +++ b/src/models/milestone.js @@ -146,37 +146,37 @@ module.exports = (sequelize, DataTypes) => { attributes: ['id', 'duration', 'startDate', 'endDate', 'actualStartDate', 'completionDate'], raw: true, }) - .then((milestones) => { - let scheduledDuration = 0; - let completedDuration = 0; - let duration = 0; - let progress = 0; - if (milestones) { - const fMilestone = milestones[0]; - const lMilestone = milestones[milestones.length - 1]; - const startDate = fMilestone.actualStartDate ? fMilestone.actualStartDate : fMilestone.startDate; - const endDate = lMilestone.completionDate ? lMilestone.completionDate : lMilestone.endDate; - duration = moment.utc(endDate).diff(moment.utc(startDate), 'days') + 1; - milestones.forEach((m) => { - if (m.completionDate !== null) { - let mDuration = 0; - if (m.actualStartDate !== null) { - mDuration = moment.utc(m.completionDate).diff(moment.utc(m.actualStartDate), 'days') + 1; + .then((milestones) => { + let scheduledDuration = 0; + let completedDuration = 0; + let duration = 0; + let progress = 0; + if (milestones) { + const fMilestone = milestones[0]; + const lMilestone = milestones[milestones.length - 1]; + const startDate = fMilestone.actualStartDate ? fMilestone.actualStartDate : fMilestone.startDate; + const endDate = lMilestone.completionDate ? lMilestone.completionDate : lMilestone.endDate; + duration = moment.utc(endDate).diff(moment.utc(startDate), 'days') + 1; + milestones.forEach((m) => { + if (m.completionDate !== null) { + let mDuration = 0; + if (m.actualStartDate !== null) { + mDuration = moment.utc(m.completionDate).diff(moment.utc(m.actualStartDate), 'days') + 1; + } else { + mDuration = moment.utc(m.completionDate).diff(moment.utc(m.startDate), 'days') + 1; + } + scheduledDuration += mDuration; + completedDuration += mDuration; } else { - mDuration = moment.utc(m.completionDate).diff(moment.utc(m.startDate), 'days') + 1; + scheduledDuration += m.duration; } - scheduledDuration += mDuration; - completedDuration += mDuration; - } else { - scheduledDuration += m.duration; + }); + if (scheduledDuration > 0) { + progress = Math.round((completedDuration / scheduledDuration) * 100); } - }); - if (scheduledDuration > 0) { - progress = Math.round((completedDuration / scheduledDuration) * 100); } - } - return Promise.resolve({ duration, progress }); - }); + return Promise.resolve({ duration, progress }); + }); }; return Milestone; diff --git a/src/models/project.js b/src/models/project.js index e027c160..9d3b39f4 100644 --- a/src/models/project.js +++ b/src/models/project.js @@ -79,7 +79,7 @@ module.exports = function defineProject(sequelize, DataTypes) { attributes: ['directProjectId'], raw: true, }) - .then(res => res.directProjectId); + .then(res => res.directProjectId); /** @@ -167,11 +167,11 @@ module.exports = function defineProject(sequelize, DataTypes) { return sequelize.query(`SELECT COUNT(1) FROM projects AS projects ${joinQuery} WHERE ${query}`, - { type: sequelize.QueryTypes.SELECT, - replacements, - logging: (str) => { log.debug(str); }, - raw: true, - }) + { type: sequelize.QueryTypes.SELECT, + replacements, + logging: (str) => { log.debug(str); }, + raw: true, + }) .then((fcount) => { let count = fcount.length; if (fcount.length === 1) { @@ -185,11 +185,11 @@ module.exports = function defineProject(sequelize, DataTypes) { ${joinQuery} WHERE ${query} ORDER BY ` + ` projects.${orderStr} LIMIT :limit OFFSET :offset`, - { type: sequelize.QueryTypes.SELECT, - replacements, - logging: (str) => { log.debug(str); }, - raw: true, - }) + { type: sequelize.QueryTypes.SELECT, + replacements, + logging: (str) => { log.debug(str); }, + raw: true, + }) .then(projects => ({ rows: projects, count })); }); }; @@ -202,7 +202,7 @@ module.exports = function defineProject(sequelize, DataTypes) { model: models.ProjectPhase, as: 'phases', order: [['startDate', 'asc']], - // where: phasesWhere, + // where: phasesWhere, include: [{ model: models.PhaseProduct, as: 'products', diff --git a/src/models/projectAttachment.js b/src/models/projectAttachment.js index 42abfa7c..fc34ecbc 100644 --- a/src/models/projectAttachment.js +++ b/src/models/projectAttachment.js @@ -59,8 +59,8 @@ module.exports = function defineProjectAttachment(sequelize, DataTypes) { }, { allowedUsers: { $or: [ - { $contains: [userId] }, - { $eq: null }, + { $contains: [userId] }, + { $eq: null }, ], }, }], diff --git a/src/models/timeline.js b/src/models/timeline.js index d9cce184..1743c6da 100644 --- a/src/models/timeline.js +++ b/src/models/timeline.js @@ -55,11 +55,11 @@ module.exports = (sequelize, DataTypes) => { // select timelines return sequelize.query(`SELECT * FROM timelines AS timelines WHERE ${query}`, - { type: sequelize.QueryTypes.SELECT, - replacements, - logging: (str) => { log.debug(str); }, - raw: true, - }) + { type: sequelize.QueryTypes.SELECT, + replacements, + logging: (str) => { log.debug(str); }, + raw: true, + }) .then(timelines => timelines); }; diff --git a/src/permissions/constants.js b/src/permissions/constants.js index d989b725..6c65d0d7 100644 --- a/src/permissions/constants.js +++ b/src/permissions/constants.js @@ -45,7 +45,7 @@ * - Add a comment to such rules explaining why allow-rule cannot be created. */ import _ from 'lodash'; - import { +import { PROJECT_MEMBER_ROLE, USER_ROLE, ADMIN_ROLES as TOPCODER_ROLES_ADMINS, @@ -53,39 +53,85 @@ import _ from 'lodash'; M2M_SCOPES, } from '../constants'; +/** + * All Project Roles + */ const PROJECT_ROLES_ALL = _.values(PROJECT_MEMBER_ROLE); + +/** + * "Management Level" Project Roles + */ const PROJECT_ROLES_MANAGEMENT = _.difference(PROJECT_ROLES_ALL, [ PROJECT_MEMBER_ROLE.COPILOT, PROJECT_MEMBER_ROLE.CUSTOMER, PROJECT_MEMBER_ROLE.OBSERVER, ]); +/** + * This is a special constant to indicate that all project members or any logged-in user + * has permission. + */ const ALL = true; +/** + * M2M scopes to "read" projects + */ const SCOPES_PROJECTS_READ = [ M2M_SCOPES.CONNECT_PROJECT_ADMIN, M2M_SCOPES.PROJECTS.ALL, M2M_SCOPES.PROJECTS.READ, ]; +/** + * M2M scopes to "write" projects + */ const SCOPES_PROJECTS_WRITE = [ M2M_SCOPES.CONNECT_PROJECT_ADMIN, M2M_SCOPES.PROJECTS.ALL, M2M_SCOPES.PROJECTS.WRITE, ]; +/** + * M2M scopes to "write" billingAccountId property + */ +const SCOPES_PROJECTS_WRITE_BILLING_ACCOUNTS = [ + M2M_SCOPES.CONNECT_PROJECT_ADMIN, + M2M_SCOPES.PROJECTS.WRITE_BILLING_ACCOUNTS, +]; + +/** + * M2M scopes to "read" projects members + */ const SCOPES_PROJECT_MEMBERS_READ = [ M2M_SCOPES.CONNECT_PROJECT_ADMIN, M2M_SCOPES.PROJECT_MEMBERS.ALL, M2M_SCOPES.PROJECT_MEMBERS.READ, ]; +/** + * M2M scopes to "write" projects members + */ const SCOPES_PROJECT_MEMBERS_WRITE = [ M2M_SCOPES.CONNECT_PROJECT_ADMIN, M2M_SCOPES.PROJECT_MEMBERS.ALL, M2M_SCOPES.PROJECT_MEMBERS.WRITE, ]; +const SCOPES_PROJECT_INVITES_READ = [ + M2M_SCOPES.CONNECT_PROJECT_ADMIN, + M2M_SCOPES.PROJECT_INVITES.ALL, + M2M_SCOPES.PROJECT_INVITES.READ, +]; + +const SCOPES_PROJECT_INVITES_WRITE = [ + M2M_SCOPES.CONNECT_PROJECT_ADMIN, + M2M_SCOPES.PROJECT_INVITES.ALL, + M2M_SCOPES.PROJECT_INVITES.WRITE, +]; + +/** + * The full list of possible permission rules in Project Service + */ export const PERMISSION = { // eslint-disable-line import/prefer-default-export /* * Project @@ -142,10 +188,11 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export scopes: SCOPES_PROJECTS_WRITE, }, - UPDATE_PROJECT_DIRECT_PROJECT_ID: { + MANAGE_PROJECT_DIRECT_PROJECT_ID: { meta: { - title: 'Update Project property "directProjectId"', + title: 'Manage Project property "directProjectId"', group: 'Project', + description: 'Who can set or update the "directProjectId" property.', }, topcoderRoles: [ USER_ROLE.MANAGER, @@ -154,6 +201,19 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export scopes: SCOPES_PROJECTS_WRITE, }, + MANAGE_PROJECT_BILLING_ACCOUNT_ID: { + meta: { + title: 'Manage Project property "billingAccountId"', + group: 'Project', + description: 'Who can set or update the "billingAccountId" property.', + }, + topcoderRoles: [ + USER_ROLE.MANAGER, + USER_ROLE.TOPCODER_ADMIN, + ], + scopes: SCOPES_PROJECTS_WRITE_BILLING_ACCOUNTS, + }, + DELETE_PROJECT: { meta: { title: 'Delete Project', @@ -284,7 +344,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export description: 'Who can view own invite.', }, topcoderRoles: ALL, - scopes: SCOPES_PROJECT_MEMBERS_READ, + scopes: SCOPES_PROJECT_INVITES_READ, }, READ_PROJECT_INVITE_NOT_OWN: { @@ -295,7 +355,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export }, topcoderRoles: TOPCODER_ROLES_MANAGERS_AND_ADMINS, projectRoles: ALL, - scopes: SCOPES_PROJECT_MEMBERS_READ, + scopes: SCOPES_PROJECT_INVITES_READ, }, CREATE_PROJECT_INVITE_CUSTOMER: { @@ -306,7 +366,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export }, topcoderRoles: TOPCODER_ROLES_MANAGERS_AND_ADMINS, projectRoles: ALL, - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, CREATE_PROJECT_INVITE_NON_CUSTOMER: { @@ -317,7 +377,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export }, topcoderRoles: TOPCODER_ROLES_ADMINS, projectRoles: PROJECT_ROLES_MANAGEMENT, - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, CREATE_PROJECT_INVITE_COPILOT_DIRECTLY: { @@ -330,7 +390,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export ...TOPCODER_ROLES_ADMINS, USER_ROLE.COPILOT_MANAGER, ], - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, UPDATE_PROJECT_INVITE_OWN: { @@ -340,7 +400,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export description: 'Who can update own invite.', }, topcoderRoles: ALL, - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, UPDATE_PROJECT_INVITE_NOT_OWN: { @@ -350,7 +410,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export description: 'Who can update invites for other members.', }, topcoderRoles: TOPCODER_ROLES_ADMINS, - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, UPDATE_PROJECT_INVITE_REQUESTED: { @@ -363,7 +423,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export ...TOPCODER_ROLES_ADMINS, USER_ROLE.COPILOT_MANAGER, ], - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, DELETE_PROJECT_INVITE_OWN: { @@ -373,7 +433,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export description: 'Who can delete own invite.', }, topcoderRoles: ALL, - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, DELETE_PROJECT_INVITE_NOT_OWN_CUSTOMER: { @@ -384,7 +444,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export }, topcoderRoles: TOPCODER_ROLES_ADMINS, projectRoles: ALL, - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, DELETE_PROJECT_INVITE_NOT_OWN_NON_CUSTOMER: { @@ -395,7 +455,7 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export }, topcoderRoles: TOPCODER_ROLES_ADMINS, projectRoles: PROJECT_ROLES_MANAGEMENT, - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, }, DELETE_PROJECT_INVITE_REQUESTED: { @@ -408,10 +468,88 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export ...TOPCODER_ROLES_ADMINS, USER_ROLE.COPILOT_MANAGER, ], - scopes: SCOPES_PROJECT_MEMBERS_WRITE, + scopes: SCOPES_PROJECT_INVITES_WRITE, + }, + + /* + * Project Attachments + */ + CREATE_PROJECT_ATTACHMENT: { + meta: { + title: 'Create Project Attachment', + group: 'Project Attachment', + }, + topcoderRoles: TOPCODER_ROLES_MANAGERS_AND_ADMINS, + projectRoles: ALL, + scopes: SCOPES_PROJECTS_WRITE, + }, + + READ_PROJECT_ATTACHMENT_OWN_OR_ALLOWED: { + meta: { + title: 'Read Project Attachment (own or allowed)', + group: 'Project Attachment', + description: 'Who can view own attachment or an attachment of another user when they are in the "allowed" list.', + }, + topcoderRoles: TOPCODER_ROLES_MANAGERS_AND_ADMINS, + projectRoles: ALL, + scopes: SCOPES_PROJECTS_READ, + }, + + READ_PROJECT_ATTACHMENT_NOT_OWN_AND_NOT_ALLOWED: { + meta: { + title: 'Read Project Attachment (not own and not allowed)', + group: 'Project Attachment', + description: 'Who can view attachment of another user when they are not in "allowed" users list.', + }, + topcoderRoles: TOPCODER_ROLES_ADMINS, + scopes: SCOPES_PROJECTS_READ, + }, + + UPDATE_PROJECT_ATTACHMENT_OWN: { + meta: { + title: 'Update Project Attachment (own)', + group: 'Project Attachment', + description: 'Who can edit attachment they created.', + }, + topcoderRoles: TOPCODER_ROLES_MANAGERS_AND_ADMINS, + projectRoles: ALL, + scopes: SCOPES_PROJECTS_WRITE, }, - /** + UPDATE_PROJECT_ATTACHMENT_NOT_OWN: { + meta: { + title: 'Update Project Attachment (not own)', + group: 'Project Attachment', + description: 'Who can edit attachment created by another user.', + }, + topcoderRoles: TOPCODER_ROLES_ADMINS, + scopes: SCOPES_PROJECTS_WRITE, + }, + + DELETE_PROJECT_ATTACHMENT_OWN: { + meta: { + title: 'Delete Project Attachment (own)', + group: 'Project Attachment', + description: 'Who can delete attachment they created.', + }, + topcoderRoles: TOPCODER_ROLES_MANAGERS_AND_ADMINS, + projectRoles: ALL, + scopes: SCOPES_PROJECTS_WRITE, + }, + + DELETE_PROJECT_ATTACHMENT_NOT_OWN: { + meta: { + title: 'Delete Project Attachment (not own)', + group: 'Project Attachment', + description: 'Who can delete attachment created by another user.', + }, + topcoderRoles: TOPCODER_ROLES_ADMINS, + scopes: SCOPES_PROJECTS_WRITE, + }, + + /* + * DEPRECATED - THIS PERMISSION RULE HAS TO BE REMOVED + * * Permissions defined by logic: **WHO** can do actions with such a permission. */ ROLES_COPILOT_AND_ABOVE: { @@ -429,6 +567,10 @@ export const PERMISSION = { // eslint-disable-line import/prefer-default-export }, }; +/** + * Matrix which define Project Roles and corresponding Topcoder Roles of users + * who may join with such Project Roles. + */ export const PROJECT_TO_TOPCODER_ROLES_MATRIX = { [PROJECT_MEMBER_ROLE.CUSTOMER]: _.values(USER_ROLE), [PROJECT_MEMBER_ROLE.MANAGER]: [ diff --git a/src/permissions/generalPermission.js b/src/permissions/generalPermission.js index ca7c8295..bce44d24 100644 --- a/src/permissions/generalPermission.js +++ b/src/permissions/generalPermission.js @@ -31,6 +31,8 @@ import models from '../models'; /** * @param {Object|Array} permissions permission object or array of permissions + * + * @return {Function} which would be resolved if `req` is allowed and rejected otherwise */ module.exports = permissions => async (req) => { const projectId = _.parseInt(req.params.projectId); @@ -38,7 +40,7 @@ module.exports = permissions => async (req) => { // if one of the `permission` requires to know Project Members, but current route doesn't belong to any project // this means such `permission` most likely has been applied by mistake, so we throw an error const permissionsRequireProjectMembers = _.isArray(permissions) - ? _.some(permissions, permission => util.hasPermissionByReq(permission, req)) + ? _.some(permissions, permission => util.isPermissionRequireProjectMembers(permission)) : util.isPermissionRequireProjectMembers(permissions); if (_.isUndefined(req.params.projectId) && permissionsRequireProjectMembers) { @@ -60,6 +62,7 @@ module.exports = permissions => async (req) => { // - if user has permissions to access endpoint even we don't know if he is a member or no, // then code would proceed and endpoint would decide to throw 404 if project doesn't exist // or perform endpoint operation if loading project members above failed because of some other reason + req.log.error(`Cannot load project members: ${err.message}.`); } } diff --git a/src/permissions/index.js b/src/permissions/index.js index 0d8dcf67..9344c0b1 100644 --- a/src/permissions/index.js +++ b/src/permissions/index.js @@ -4,8 +4,6 @@ const Authorizer = require('tc-core-library-js').Authorizer; const projectView = require('./project.view'); const projectEdit = require('./project.edit'); const projectAdmin = require('./admin.ops'); -const projectAttachmentUpdate = require('./project.updateAttachment'); -const projectAttachmentDownload = require('./project.downloadAttachment'); const connectManagerOrAdmin = require('./connectManagerOrAdmin.ops'); const copilotAndAbove = require('./copilotAndAbove'); const workManagementPermissions = require('./workManagementForTemplate'); @@ -23,42 +21,50 @@ module.exports = () => { Authorizer.setPolicy('project.delete', generalPermission(PERMISSION.DELETE_PROJECT)); Authorizer.setPolicy('projectMember.create', generalPermission([ - PERMISSION.CREATE_PROJECT_MEMBER_OWN, // actually this permission includes the second permission and is enough + PERMISSION.CREATE_PROJECT_MEMBER_OWN, PERMISSION.CREATE_PROJECT_MEMBER_NOT_OWN, ])); Authorizer.setPolicy('projectMember.view', generalPermission(PERMISSION.READ_PROJECT_MEMBER)); Authorizer.setPolicy('projectMember.edit', generalPermission([ - PERMISSION.UPDATE_PROJECT_MEMBER_CUSTOMER, // actually this permission includes the second permission and is enough + PERMISSION.UPDATE_PROJECT_MEMBER_CUSTOMER, PERMISSION.UPDATE_PROJECT_MEMBER_NON_CUSTOMER, ])); Authorizer.setPolicy('projectMember.delete', generalPermission([ - PERMISSION.DELETE_PROJECT_MEMBER_CUSTOMER, // actually this permission includes the second permission and is enough + PERMISSION.DELETE_PROJECT_MEMBER_CUSTOMER, PERMISSION.DELETE_PROJECT_MEMBER_NON_CUSTOMER, ])); Authorizer.setPolicy('projectMemberInvite.create', generalPermission([ - PERMISSION.CREATE_PROJECT_INVITE_CUSTOMER, // actually this permission includes the second permission and is enough + PERMISSION.CREATE_PROJECT_INVITE_CUSTOMER, PERMISSION.CREATE_PROJECT_INVITE_NON_CUSTOMER, ])); Authorizer.setPolicy('projectMemberInvite.view', generalPermission([ - PERMISSION.READ_PROJECT_INVITE_OWN, // actually this permission includes the second permission and is enough + PERMISSION.READ_PROJECT_INVITE_OWN, PERMISSION.READ_PROJECT_INVITE_NOT_OWN, ])); Authorizer.setPolicy('projectMemberInvite.edit', generalPermission([ - PERMISSION.UPDATE_PROJECT_INVITE_OWN, // actually this permission includes the second permission and is enough + PERMISSION.UPDATE_PROJECT_INVITE_OWN, PERMISSION.UPDATE_PROJECT_INVITE_NOT_OWN, ])); Authorizer.setPolicy('projectMemberInvite.delete', generalPermission([ - PERMISSION.DELETE_PROJECT_INVITE_OWN, // actually this permission includes the second permission and is enough + PERMISSION.DELETE_PROJECT_INVITE_OWN, PERMISSION.DELETE_PROJECT_INVITE_NOT_OWN_CUSTOMER, PERMISSION.DELETE_PROJECT_INVITE_NOT_OWN_NON_CUSTOMER, ])); - Authorizer.setPolicy('project.addAttachment', projectEdit); - Authorizer.setPolicy('project.updateAttachment', projectAttachmentUpdate); - Authorizer.setPolicy('project.removeAttachment', projectAttachmentUpdate); - Authorizer.setPolicy('project.downloadAttachment', projectAttachmentDownload); - Authorizer.setPolicy('project.listAttachment', projectView); + Authorizer.setPolicy('projectAttachment.create', generalPermission(PERMISSION.CREATE_PROJECT_ATTACHMENT)); + Authorizer.setPolicy('projectAttachment.view', generalPermission([ + PERMISSION.READ_PROJECT_ATTACHMENT_OWN_OR_ALLOWED, + PERMISSION.READ_PROJECT_ATTACHMENT_NOT_OWN_AND_NOT_ALLOWED, + ])); + Authorizer.setPolicy('projectAttachment.edit', generalPermission([ + PERMISSION.UPDATE_PROJECT_ATTACHMENT_OWN, + PERMISSION.UPDATE_PROJECT_ATTACHMENT_NOT_OWN, + ])); + Authorizer.setPolicy('projectAttachment.delete', generalPermission([ + PERMISSION.DELETE_PROJECT_ATTACHMENT_OWN, + PERMISSION.DELETE_PROJECT_ATTACHMENT_NOT_OWN, + ])); Authorizer.setPolicy('project.admin', projectAdmin); @@ -110,6 +116,7 @@ module.exports = () => { Authorizer.setPolicy('milestone.create', projectEdit); Authorizer.setPolicy('milestone.edit', projectEdit); Authorizer.setPolicy('milestone.delete', projectEdit); + Authorizer.setPolicy('milestone.bulkUpdate', projectEdit); Authorizer.setPolicy('milestone.view', projectView); Authorizer.setPolicy('metadata.list', true); // anyone can view all metadata diff --git a/src/permissions/project.downloadAttachment.js b/src/permissions/project.downloadAttachment.js deleted file mode 100644 index 8c986d19..00000000 --- a/src/permissions/project.downloadAttachment.js +++ /dev/null @@ -1,37 +0,0 @@ -import _ from 'lodash'; -import util from '../util'; -import models from '../models'; - -/** - * Connect admin and Topcoder admins are allowed to download any project attachments - * Rest can update attachments that they created or given access - * @param {Object} freq the express request instance - * @return {Promise} Returns a promise - */ -module.exports = freq => new Promise((resolve, reject) => { - const projectId = _.parseInt(freq.params.projectId); - const attachmentId = _.parseInt(freq.params.id); - const userId = freq.authUser.userId; - - if (util.hasAdminRole(freq)) { - return resolve(true); - } - return models.ProjectAttachment.getAttachmentById(projectId, attachmentId) - .then((attachment) => { - const req = freq; - req.context = req.context || {}; - req.context.existingAttachment = attachment; - - // deligate not found to the actual handler - if (!attachment) { - return resolve(true); - } - - if (attachment.createdBy === userId || attachment.allowedUsers === null || - attachment.allowedUsers.indexOf(userId) >= 0) { - return resolve(true); - } - - return reject(new Error('You\'re not allowed to download')); - }); -}); diff --git a/src/permissions/project.edit.js b/src/permissions/project.edit.js index a9ab5d51..29641ebf 100644 --- a/src/permissions/project.edit.js +++ b/src/permissions/project.edit.js @@ -14,19 +14,19 @@ import { MANAGER_ROLES } from '../constants'; module.exports = freq => new Promise((resolve, reject) => { const projectId = _.parseInt(freq.params.projectId); return models.ProjectMember.getActiveProjectMembers(projectId) - .then((members) => { - const req = freq; - req.context = req.context || {}; - req.context.currentProjectMembers = members; - // check if auth user has acecss to this project - const hasAccess = util.hasAdminRole(req) + .then((members) => { + const req = freq; + req.context = req.context || {}; + req.context.currentProjectMembers = members; + // check if auth user has acecss to this project + const hasAccess = util.hasAdminRole(req) || util.hasRoles(req, MANAGER_ROLES) || !_.isUndefined(_.find(members, m => m.userId === req.authUser.userId)); - if (!hasAccess) { - // user is not an admin nor is a registered project member - return reject(new Error('You do not have permissions to perform this action')); - } - return resolve(true); - }); + if (!hasAccess) { + // user is not an admin nor is a registered project member + return reject(new Error('You do not have permissions to perform this action')); + } + return resolve(true); + }); }); diff --git a/src/permissions/project.updateAttachment.js b/src/permissions/project.updateAttachment.js deleted file mode 100644 index 0fe4f182..00000000 --- a/src/permissions/project.updateAttachment.js +++ /dev/null @@ -1,36 +0,0 @@ -import _ from 'lodash'; -import util from '../util'; -import models from '../models'; - -/** - * Connect admin and Topcoder admins are allowed to update any project attachments - * Rest can update attachments that they created - * @param {Object} freq the express request instance - * @return {Promise} Returns a promise - */ -module.exports = freq => new Promise((resolve, reject) => { - const projectId = _.parseInt(freq.params.projectId); - const attachmentId = _.parseInt(freq.params.id); - - if (util.hasAdminRole(freq)) { - return resolve(true); - } - - return models.ProjectAttachment.getAttachmentById(projectId, attachmentId) - .then((attachment) => { - const req = freq; - req.context = req.context || {}; - req.context.existingAttachment = attachment; - - // deligate not found to the actual handler - if (!attachment) { - return resolve(true); - } - - if (attachment.createdBy === req.authUser.userId) { - return resolve(true); - } - - return reject(new Error('Only admins and the user that uploaded the docs can modify')); - }); -}); diff --git a/src/permissions/project.view.js b/src/permissions/project.view.js index e14049ea..82bc8ea8 100644 --- a/src/permissions/project.view.js +++ b/src/permissions/project.view.js @@ -15,23 +15,23 @@ module.exports = freq => new Promise((resolve, reject) => { const projectId = _.parseInt(freq.params.projectId); const currentUserId = freq.authUser.userId; return models.ProjectMember.getActiveProjectMembers(projectId) - .then((members) => { - const req = freq; - req.context = req.context || {}; - req.context.currentProjectMembers = members; - // check if auth user has acecss to this project - const hasAccess = util.hasAdminRole(req) + .then((members) => { + const req = freq; + req.context = req.context || {}; + req.context.currentProjectMembers = members; + // check if auth user has acecss to this project + const hasAccess = util.hasAdminRole(req) || util.hasRoles(req, MANAGER_ROLES) || !_.isUndefined(_.find(members, m => m.userId === currentUserId)); - return Promise.resolve(hasAccess); - }) - .then((hasAccess) => { - if (!hasAccess) { - const errorMessage = 'You do not have permissions to perform this action'; - // user is not an admin nor is a registered project member - return reject(new Error(errorMessage)); - } - return resolve(true); - }); + return Promise.resolve(hasAccess); + }) + .then((hasAccess) => { + if (!hasAccess) { + const errorMessage = 'You do not have permissions to perform this action'; + // user is not an admin nor is a registered project member + return reject(new Error(errorMessage)); + } + return resolve(true); + }); }); diff --git a/src/routes/admin/project-index-create.js b/src/routes/admin/project-index-create.js index 109faf6d..9a6c13a4 100644 --- a/src/routes/admin/project-index-create.js +++ b/src/routes/admin/project-index-create.js @@ -19,7 +19,7 @@ const ES_PROJECT_TYPE = config.get('elasticsearchConfig.docType'); module.exports = [ permissions('project.admin'), - /** + /* * handles request of indexing projects */ (req, res, next) => { @@ -32,30 +32,30 @@ module.exports = [ const fields = req.query.fields; const id = req.id; return indexProjectsRange( - { - logger, - projectIdStart, - projectIdEnd, - indexName, - docType, - fields, - id, - }, - (esIndexingBody) => { - res.status(200).json({ - message: `Reindex request successfully submitted for ${ - esIndexingBody.length / 2 - } projects`, - }); - }, - ).then((result) => { - logger.debug(`project indexed successfully (projectId: ${projectIdStart}-${projectIdEnd})`, result); - logger.debug(result); - }).catch((error) => { - logger.error( - `Error in getting project details for indexing (projectId: ${projectIdStart}-${projectIdEnd})`, + { + logger, + projectIdStart, + projectIdEnd, + indexName, + docType, + fields, + id, + }, + (esIndexingBody) => { + res.status(200).json({ + message: `Reindex request successfully submitted for ${ + esIndexingBody.length / 2 + } projects`, + }); + }, + ).then((result) => { + logger.debug(`project indexed successfully (projectId: ${projectIdStart}-${projectIdEnd})`, result); + logger.debug(result); + }).catch((error) => { + logger.error( + `Error in getting project details for indexing (projectId: ${projectIdStart}-${projectIdEnd})`, error); - next(error); - }); + next(error); + }); }, ]; diff --git a/src/routes/admin/project-index-delete.js b/src/routes/admin/project-index-delete.js index 70310201..5eb0c436 100644 --- a/src/routes/admin/project-index-delete.js +++ b/src/routes/admin/project-index-delete.js @@ -23,7 +23,7 @@ const ES_PROJECT_TYPE = config.get('elasticsearchConfig.docType'); module.exports = [ permissions('project.admin'), - /** + /* * GET projects/{projectId} * Get a project by id */ @@ -40,7 +40,7 @@ module.exports = [ logger.debug('docType', docType); let fields = req.query.fields; fields = fields ? fields.split(',') : []; - // parse the fields string to determine what fields are to be returned + // parse the fields string to determine what fields are to be returned fields = util.parseFields(fields, { projects: PROJECT_ATTRIBUTES, project_members: PROJECT_MEMBER_ATTRIBUTES, @@ -48,37 +48,40 @@ module.exports = [ const eClient = util.getElasticSearchClient(); return models.Project.findProjectRange(models, projectIdStart, projectIdEnd, fields) - .then((_projects) => { - const projects = _projects.map((_project) => { - const project = _project; - if (!project) { - return Promise.resolve(null); - } - return Promise.resolve(project); - }); - const body = []; - Promise.all(projects).then((projectResponses) => { - projectResponses.map((p) => { - if (p) { - body.push({ delete: { _index: indexName, _type: docType, _id: p.id } }); + .then((_projects) => { + const projects = _projects.map((_project) => { + const project = _project; + if (!project) { + return Promise.resolve(null); } - // dummy return - return p; + return Promise.resolve(project); }); + const body = []; + Promise.all(projects).then((projectResponses) => { + projectResponses.map((p) => { + if (p) { + body.push({ delete: { _index: indexName, _type: docType, _id: p.id } }); + } + // dummy return + return p; + }); - // bulk delete - eClient.bulk({ - body, - }) - .then((result) => { - logger.debug(`project index deleted successfully (projectId: ${projectIdStart}-${projectIdEnd})`, result); - }) - .catch((error) => { - logger.error(`Error in deleting indexes for project (projectId: ${projectIdStart}-${projectIdEnd})`, error); + // bulk delete + eClient.bulk({ + body, + }) + .then((result) => { + logger.debug(`project index deleted successfully (projectId: ${projectIdStart}-${projectIdEnd})`, result); + }) + .catch((error) => { + logger.error( + `Error in deleting indexes for project (projectId: ${projectIdStart}-${projectIdEnd})`, + error, + ); + }); + res.status(200).json({ message: 'Delete index request successfully submitted' }); }); - res.status(200).json({ message: 'Delete index request successfully submitted' }); - }); - }) - .catch(err => next(err)); + }) + .catch(err => next(err)); }, ]; diff --git a/src/routes/attachments/create.js b/src/routes/attachments/create.js index 81525e1f..81c1a80a 100644 --- a/src/routes/attachments/create.js +++ b/src/routes/attachments/create.js @@ -33,8 +33,8 @@ const addAttachmentValidations = { module.exports = [ // handles request validations validate(addAttachmentValidations), - permissions('project.addAttachment'), - /** + permissions('projectAttachment.create'), + /* * Add project attachment * In development mode we have to mock the ec2 file transfer and file service calls */ @@ -109,17 +109,17 @@ module.exports = [ res.status(201).json(link); return Promise.resolve(); }) - .catch((error) => { - req.log.error('Error adding link attachment', error); - const rerr = error; - rerr.status = rerr.status || 500; - next(rerr); - }); + .catch((error) => { + req.log.error('Error adding link attachment', error); + const rerr = error; + rerr.status = rerr.status || 500; + next(rerr); + }); } else { // don't actually transfer file in development mode if file uploading is disabled, so we can test this endpoint const fileTransferPromise = (process.env.NODE_ENV !== 'development' || config.get('enableFileUpload') === 'true') - ? util.s3FileTransfer(req, sourceBucket, sourceKey, destBucket, destKey) - : Promise.resolve(); + ? util.s3FileTransfer(req, sourceBucket, sourceKey, destBucket, destKey) + : Promise.resolve(); fileTransferPromise.then(() => { // file copied to final destination, create DB record @@ -164,17 +164,17 @@ module.exports = [ response.downloadUrl = resp.data.result.content.preSignedURL; // publish event req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, - newAttachment, - { correlationId: req.id }, - ); + EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, + newAttachment, + { correlationId: req.id }, + ); // emit the event util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, - RESOURCES.ATTACHMENT, - newAttachment); + req, + EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, + RESOURCES.ATTACHMENT, + newAttachment); res.status(201).json(response); accept(); } @@ -186,26 +186,26 @@ module.exports = [ response.downloadUrl = path; // publish event req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, - newAttachment, - { correlationId: req.id }, - ); + EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, + newAttachment, + { correlationId: req.id }, + ); // emit the event util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, - RESOURCES.ATTACHMENT, - newAttachment); + req, + EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_ADDED, + RESOURCES.ATTACHMENT, + newAttachment); res.status(201).json(response); return Promise.resolve(); }) - .catch((error) => { - req.log.error('Error adding file attachment', error); - const rerr = error; - rerr.status = rerr.status || 500; - next(rerr); - }); + .catch((error) => { + req.log.error('Error adding file attachment', error); + const rerr = error; + rerr.status = rerr.status || 500; + next(rerr); + }); } }, ]; diff --git a/src/routes/attachments/create.spec.js b/src/routes/attachments/create.spec.js index d3bcf819..1efc9ff9 100644 --- a/src/routes/attachments/create.spec.js +++ b/src/routes/attachments/create.spec.js @@ -73,38 +73,38 @@ describe('Project Attachments', () => { // mocks testUtil.clearDb() - .then(() => { - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + models.ProjectMember.create({ + userId: 40051332, + projectId: project1.id, + role: 'copilot', + isPrimary: true, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - models.ProjectMember.create({ - userId: 40051332, - projectId: project1.id, - role: 'copilot', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }).then(() => { - sandbox = sinon.sandbox.create(); - postSpy = sandbox.spy(mockHttpClient, 'post'); - getSpy = sandbox.spy(mockHttpClient, 'get'); - stub = sandbox.stub(util, 'getHttpClient', () => mockHttpClient); - sandbox.stub(util, 's3FileTransfer').returns(Promise.resolve(true)); - done(); - }); + }).then(() => { + sandbox = sinon.sandbox.create(); + postSpy = sandbox.spy(mockHttpClient, 'post'); + getSpy = sandbox.spy(mockHttpClient, 'get'); + stub = sandbox.stub(util, 'getHttpClient', () => mockHttpClient); + sandbox.stub(util, 's3FileTransfer').returns(Promise.resolve(true)); + done(); }); }); + }); }); afterEach((done) => { @@ -115,94 +115,122 @@ describe('Project Attachments', () => { describe('POST /projects/{id}/attachments/', () => { it('should return 403 if user does not have permissions', (done) => { request(server) - .post(`/v5/projects/${project1.id}/attachments/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .send(fileAttachmentBody) - .expect('Content-Type', /json/) - .expect(403, done); + .post(`/v5/projects/${project1.id}/attachments/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .send(fileAttachmentBody) + .expect('Content-Type', /json/) + .expect(403, done); }); it('should return 400 if contentType is not provided for file attachment', (done) => { const payload = _.omit(_.cloneDeep(fileAttachmentBody), 'contentType'); request(server) - .post(`/v5/projects/${project1.id}/attachments/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send(payload) - .expect('Content-Type', /json/) - .expect(400, done); + .post(`/v5/projects/${project1.id}/attachments/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send(payload) + .expect('Content-Type', /json/) + .expect(400, done); }); it('should return 400 if s3Bucket is not provided for file attachment', (done) => { const payload = _.omit(_.cloneDeep(fileAttachmentBody), 's3Bucket'); request(server) - .post(`/v5/projects/${project1.id}/attachments/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send(payload) - .expect('Content-Type', /json/) - .expect(400, done); + .post(`/v5/projects/${project1.id}/attachments/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send(payload) + .expect('Content-Type', /json/) + .expect(400, done); }); it('should properly create file attachment - 201', (done) => { request(server) - .post(`/v5/projects/${project1.id}/attachments/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send(fileAttachmentBody) - .expect('Content-Type', /json/) - .expect(201) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - postSpy.should.have.been.calledOnce; - getSpy.should.have.been.calledOnce; - stub.restore(); - resJson.title.should.equal(fileAttachmentBody.title); - resJson.tags.should.eql(fileAttachmentBody.tags); - resJson.type.should.eql(fileAttachmentBody.type); - resJson.downloadUrl.should.exist; - resJson.projectId.should.equal(project1.id); - done(); - } - }); + .post(`/v5/projects/${project1.id}/attachments/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send(fileAttachmentBody) + .expect('Content-Type', /json/) + .expect(201) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + postSpy.should.have.been.calledOnce; + getSpy.should.have.been.calledOnce; + stub.restore(); + resJson.title.should.equal(fileAttachmentBody.title); + resJson.tags.should.eql(fileAttachmentBody.tags); + resJson.type.should.eql(fileAttachmentBody.type); + resJson.downloadUrl.should.exist; + resJson.projectId.should.equal(project1.id); + done(); + } + }); }); it('should properly create link attachment - 201', (done) => { request(server) - .post(`/v5/projects/${project1.id}/attachments/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send(linkAttachmentBody) - .expect('Content-Type', /json/) - .expect(201) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - postSpy.should.have.been.calledOnce; - getSpy.should.have.been.calledOnce; - stub.restore(); - resJson.title.should.equal(linkAttachmentBody.title); - resJson.path.should.equal(linkAttachmentBody.path); - resJson.description.should.equal(linkAttachmentBody.description); - resJson.type.should.equal(linkAttachmentBody.type); - resJson.tags.should.eql(linkAttachmentBody.tags); - resJson.projectId.should.equal(project1.id); - done(); - } - }); + .post(`/v5/projects/${project1.id}/attachments/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send(linkAttachmentBody) + .expect('Content-Type', /json/) + .expect(201) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + postSpy.should.have.been.calledOnce; + getSpy.should.have.been.calledOnce; + stub.restore(); + resJson.title.should.equal(linkAttachmentBody.title); + resJson.path.should.equal(linkAttachmentBody.path); + resJson.description.should.equal(linkAttachmentBody.description); + resJson.type.should.equal(linkAttachmentBody.type); + resJson.tags.should.eql(linkAttachmentBody.tags); + resJson.projectId.should.equal(project1.id); + done(); + } + }); + }); + + it('should create project successfully using M2M token with "write:projects" scope', (done) => { + request(server) + .post(`/v5/projects/${project1.id}/attachments/`) + .set({ + Authorization: `Bearer ${testUtil.m2m['write:projects']}`, + }) + .send(fileAttachmentBody) + .expect('Content-Type', /json/) + .expect(201) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + postSpy.should.have.been.calledOnce; + getSpy.should.have.been.calledOnce; + stub.restore(); + resJson.title.should.equal(fileAttachmentBody.title); + resJson.tags.should.eql(fileAttachmentBody.tags); + resJson.type.should.eql(fileAttachmentBody.type); + resJson.downloadUrl.should.exist; + resJson.projectId.should.equal(project1.id); + done(); + } + }); }); describe('Bus api', () => { diff --git a/src/routes/attachments/delete.js b/src/routes/attachments/delete.js index 9d961b01..6685feff 100644 --- a/src/routes/attachments/delete.js +++ b/src/routes/attachments/delete.js @@ -19,19 +19,19 @@ import { EVENT, RESOURCES, ATTACHMENT_TYPES } from '../../constants'; const permissions = tcMiddleware.permissions; module.exports = [ - permissions('project.removeAttachment'), + permissions('projectAttachment.delete'), (req, res, next) => { const projectId = _.parseInt(req.params.projectId); const attachmentId = _.parseInt(req.params.id); let attachment; models.sequelize.transaction(() => // soft delete the record - models.ProjectAttachment.findOne({ - where: { - id: attachmentId, - projectId, - }, - }) + models.ProjectAttachment.findOne({ + where: { + id: attachmentId, + projectId, + }, + }) .then((_attachment) => { if (!_attachment) { const err = new Error('Record not found'); @@ -42,29 +42,29 @@ module.exports = [ return _attachment.update({ deletedBy: req.authUser.userId }) .then(() => _attachment.destroy()); })) - .then((_attachment) => { - if (_attachment.type === ATTACHMENT_TYPES.FILE && + .then((_attachment) => { + if (_attachment.type === ATTACHMENT_TYPES.FILE && (process.env.NODE_ENV !== 'development' || config.get('enableFileUpload') === 'true')) { - return fileService.deleteFile(req, _attachment.path); - } - return Promise.resolve(); - }) - .then(() => { - // fire event - const pattachment = attachment.get({ plain: true }); - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_REMOVED, - pattachment, - { correlationId: req.id }, - ); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_REMOVED, - RESOURCES.ATTACHMENT, - pattachment); - res.status(204).json({}); - }) - .catch(err => next(err)); + return fileService.deleteFile(req, _attachment.path); + } + return Promise.resolve(); + }) + .then(() => { + // fire event + const pattachment = attachment.get({ plain: true }); + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_REMOVED, + pattachment, + { correlationId: req.id }, + ); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_REMOVED, + RESOURCES.ATTACHMENT, + pattachment); + res.status(204).json({}); + }) + .catch(err => next(err)); }, ]; diff --git a/src/routes/attachments/delete.spec.js b/src/routes/attachments/delete.spec.js index 680e1ea9..96aecd55 100644 --- a/src/routes/attachments/delete.spec.js +++ b/src/routes/attachments/delete.spec.js @@ -20,30 +20,30 @@ describe('Project Attachments delete', () => { attachments = []; testUtil.clearDb() .then(() => testUtil.clearES()) - .then(() => { - models.Project.create({ - type: 'generic', - directProjectId: 1, - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + directProjectId: 1, + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + return models.ProjectMember.create({ + userId: 40051332, + projectId: project1.id, + role: 'copilot', + isPrimary: true, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - return models.ProjectMember.create({ - userId: 40051332, - projectId: project1.id, - role: 'copilot', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }).then(() => + }).then(() => models.ProjectAttachment.create({ projectId: project1.id, title: 'file1.txt', @@ -71,12 +71,12 @@ describe('Project Attachments delete', () => { createdBy: testUtil.userIds.copilot, updatedBy: 1, }).then((link) => { - attachments.push(link); - done(); - }); + attachments.push(link); + done(); + }); })); - }); }); + }); }); after((done) => { @@ -94,22 +94,22 @@ describe('Project Attachments delete', () => { it('should return 403 if user does not have permissions', (done) => { request(server) - .delete(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .send({ userId: 1, projectId: project1.id, role: 'customer' }) - .expect(403, done); + .delete(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .send({ userId: 1, projectId: project1.id, role: 'customer' }) + .expect(403, done); }); it('should return 404 if attachment was not found', (done) => { request(server) - .delete(`/v5/projects/${project1.id}/attachments/8888888`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ userId: 1, projectId: project1.id, role: 'customer' }) - .expect(404, done); + .delete(`/v5/projects/${project1.id}/attachments/8888888`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ userId: 1, projectId: project1.id, role: 'customer' }) + .expect(404, done); }); @@ -131,64 +131,64 @@ describe('Project Attachments delete', () => { const deleteSpy = sinon.spy(mockHttpClient, 'delete'); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .delete(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .expect(204) - .end((err) => { - if (err) { - done(err); - } else { - setTimeout(() => - models.ProjectAttachment.findOne({ - where: { - projectId: project1.id, - id: attachments[0].id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - deleteSpy.calledOnce.should.be.true; + .delete(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + setTimeout(() => + models.ProjectAttachment.findOne({ + where: { + projectId: project1.id, + id: attachments[0].id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + deleteSpy.calledOnce.should.be.true; - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, done); - } - }), 500); - } - }); + request(server) + .get(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); + } + }), 500); + } + }); }); it('should return 204 if ADMIN deletes the file attachment successfully', (done) => { request(server) - .delete(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ userId: 1, projectId: project1.id, role: 'customer' }) - .expect(204, done) - .end((err) => { - if (err) { - done(err); - } else { - request(server) + .delete(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ userId: 1, projectId: project1.id, role: 'customer' }) + .expect(204, done) + .end((err) => { + if (err) { + done(err); + } else { + request(server) .get(`/v5/projects/${project1.id}/attachments/${attachments[0].id}`) .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) .expect(404, done); - } - }); + } + }); }); it('should return 204 if the CREATOR removes the link attachment successfully', (done) => { @@ -209,63 +209,118 @@ describe('Project Attachments delete', () => { const deleteSpy = sinon.spy(mockHttpClient, 'delete'); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .delete(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .expect(204) - .end((err) => { - if (err) { - done(err); - } else { - setTimeout(() => - models.ProjectAttachment.findOne({ - where: { - projectId: project1.id, - id: attachments[1].id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - deleteSpy.called.should.be.false; - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + .delete(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + setTimeout(() => + models.ProjectAttachment.findOne({ + where: { + projectId: project1.id, + id: attachments[1].id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + deleteSpy.called.should.be.false; + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, done); - } - }), 500); - } - }); + request(server) + .get(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); + } + }), 500); + } + }); }); it('should return 204 if ADMIN deletes the link attachment successfully', (done) => { request(server) - .delete(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ userId: 1, projectId: project1.id, role: 'customer' }) - .expect(204, done) - .end((err) => { - if (err) { - done(err); - } else { - request(server) + .delete(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ userId: 1, projectId: project1.id, role: 'customer' }) + .expect(204, done) + .end((err) => { + if (err) { + done(err); + } else { + request(server) .get(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) .expect(404, done); - } - }); + } + }); + }); + + it('should remove attachment file using M2M token with "write:projects" scope', (done) => { + const mockHttpClient = _.merge(testUtil.mockHttpClient, { + delete: () => Promise.resolve({ + status: 200, + data: { + id: 'requesterId', + version: 'v3', + result: { + success: true, + status: 200, + content: true, + }, + }, + }), + }); + const deleteSpy = sinon.spy(mockHttpClient, 'delete'); + sandbox.stub(util, 'getHttpClient', () => mockHttpClient); + request(server) + .delete(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) + .set({ + Authorization: `Bearer ${testUtil.m2m['write:projects']}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + setTimeout(() => + models.ProjectAttachment.findOne({ + where: { + projectId: project1.id, + id: attachments[1].id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + deleteSpy.called.should.be.false; + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); + + request(server) + .get(`/v5/projects/${project1.id}/attachments/${attachments[1].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); + } + }), 500); + } + }); }); describe('Bus api', () => { diff --git a/src/routes/attachments/get.js b/src/routes/attachments/get.js index bd5081f6..374d96f6 100644 --- a/src/routes/attachments/get.js +++ b/src/routes/attachments/get.js @@ -4,6 +4,7 @@ import { middleware as tcMiddleware } from 'tc-core-library-js'; import models from '../../models'; import util from '../../util'; import { ATTACHMENT_TYPES } from '../../constants'; +import permissionUtils from '../../utils/permissions'; /** * API to get a project attachment. @@ -36,7 +37,7 @@ const getPreSignedUrl = async (req, attachment) => { }; module.exports = [ - permissions('project.downloadAttachment'), + permissions('projectAttachment.view'), (req, res, next) => { const projectId = _.parseInt(req.params.projectId); const attachmentId = _.parseInt(req.params.id); @@ -62,44 +63,51 @@ module.exports = [ }, }, }) - .then((data) => { - if (data.length === 0) { - req.log.debug('No attachment found in ES'); - return models.ProjectAttachment.findOne( - { - where: { - id: attachmentId, - projectId, - }, - }) - .then((attachment) => { - if (!attachment) { - const err = new Error('Record not found'); - err.status = 404; - return Promise.reject(err); - } - return getPreSignedUrl(req, attachment); - }) - .catch((error) => { - req.log.error('Error fetching attachment', error); - const rerr = error; - rerr.status = rerr.status || 500; - next(rerr); - }); - } - req.log.debug('attachment found in ES'); - const attachment = data[0].inner_hits.attachments.hits.hits[0]._source; // eslint-disable-line no-underscore-dangle + .then((data) => { + if (data.length === 0) { + req.log.debug('No attachment found in ES'); + return models.ProjectAttachment.findOne( + { + where: { + id: attachmentId, + projectId, + }, + }) + .catch((error) => { + req.log.error('Error fetching attachment', error); + const rerr = error; + rerr.status = rerr.status || 500; + next(rerr); + }); + } + req.log.debug('attachment found in ES'); + return data[0].inner_hits.attachments.hits.hits[0]._source; // eslint-disable-line no-underscore-dangle + }) + // check permissions + .then((attachment) => { + // if don't have permissions we would return 404 below as users shouldn't even know if attachment exists + if (!permissionUtils.hasReadAccessToAttachment(attachment, req)) { + return null; + } - return getPreSignedUrl(req, attachment); - }) - .then((result) => { - req.log.debug('getPresigned url result: ', JSON.stringify(result)); - if (_.isEmpty(result[1])) { - return res.json(result[0]); - } + return attachment; + }) + .then((attachment) => { + if (!attachment) { + const err = new Error('Record not found'); + err.status = 404; + return Promise.reject(err); + } + return getPreSignedUrl(req, attachment); + }) + .then((result) => { + req.log.debug('getPresigned url result: ', JSON.stringify(result)); + if (_.isEmpty(result[1])) { + return res.json(result[0]); + } - return res.json(_.extend(result[0], { url: result[1] })); - }) - .catch(next); + return res.json(_.extend(result[0], { url: result[1] })); + }) + .catch(next); }, ]; diff --git a/src/routes/attachments/get.spec.js b/src/routes/attachments/get.spec.js index 4b8f6f5b..73631ba3 100644 --- a/src/routes/attachments/get.spec.js +++ b/src/routes/attachments/get.spec.js @@ -21,48 +21,62 @@ describe('Get Project attachments Tests', () => { beforeEach((done) => { testUtil.clearDb() .then(() => testUtil.clearES()) - .then(() => { - models.Project.create({ - type: 'generic', - directProjectId: 1, - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + directProjectId: 1, + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + return models.ProjectMember.create({ + userId: 40051332, + projectId: project1.id, + role: 'copilot', + isPrimary: true, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - return models.ProjectMember.create({ - userId: 40051332, - projectId: project1.id, - role: 'copilot', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }).then(() => models.ProjectAttachment.create({ - projectId: project1.id, - title: 'test.txt', - description: 'blah', - contentType: 'application/unknown', - size: 12312, - category: null, - path: 'https://media.topcoder.com/projects/1/test.txt', - type: ATTACHMENT_TYPES.FILE, - tags: ['tag1', 'tag2'], - createdBy: testUtil.userIds.copilot, - updatedBy: 1, - allowedUsers: [testUtil.userIds.member], - }).then((a1) => { - attachment = a1; - done(); - })); - }); + }).then(() => models.ProjectMember.create({ + userId: testUtil.userIds.member, + projectId: project1.id, + role: 'customer', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + })).then(() => models.ProjectMember.create({ + userId: testUtil.userIds.member2, + projectId: project1.id, + role: 'customer', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + })).then(() => models.ProjectAttachment.create({ + projectId: project1.id, + title: 'test.txt', + description: 'blah', + contentType: 'application/unknown', + size: 12312, + category: null, + path: 'https://media.topcoder.com/projects/1/test.txt', + type: ATTACHMENT_TYPES.FILE, + tags: ['tag1', 'tag2'], + createdBy: testUtil.userIds.copilot, + updatedBy: 1, + allowedUsers: [testUtil.userIds.member], + }).then((a1) => { + attachment = a1; + done(); + })); }); + }); }); after((done) => { @@ -78,24 +92,24 @@ describe('Get Project attachments Tests', () => { sandbox.restore(); }); - it('should return 403 if USER does not have permissions', (done) => { + it('should return 404 if USER does not have permissions', (done) => { request(server) .get(`/v5/projects/${project1.id}/attachments/${attachment.id}`) .set({ Authorization: `Bearer ${testUtil.jwts.member2}`, }) .send() - .expect(403, done); + .expect(404, done); }); - it('should return 403 if MANAGER does not have permissions', (done) => { + it('should return 404 if MANAGER does not have permissions', (done) => { request(server) .get(`/v5/projects/${project1.id}/attachments/${attachment.id}`) .set({ Authorization: `Bearer ${testUtil.jwts.manager}`, }) .send() - .expect(403, done); + .expect(404, done); }); it('should return 404 if attachment was not found', (done) => { @@ -137,5 +151,15 @@ describe('Get Project attachments Tests', () => { .send() .expect(200, done); }); + + it('should return 200 when using M2M token with scope "read:projects"', (done) => { + request(server) + .get(`/v5/projects/${project1.id}/attachments/${attachment.id}`) + .set({ + Authorization: `Bearer ${testUtil.m2m['read:projects']}`, + }) + .send() + .expect(200, done); + }); }); }); diff --git a/src/routes/attachments/list.js b/src/routes/attachments/list.js index d77c7513..b8f25b88 100644 --- a/src/routes/attachments/list.js +++ b/src/routes/attachments/list.js @@ -4,6 +4,7 @@ import Joi from 'joi'; import { middleware as tcMiddleware } from 'tc-core-library-js'; import models from '../../models'; import util from '../../util'; +import permissionUtils from '../../utils/permissions'; /** * API to get project attachments. @@ -20,7 +21,7 @@ const schema = { module.exports = [ validate(schema), - permissions('project.listAttachment'), + permissions('projectAttachment.view'), (req, res, next) => { const projectId = _.parseInt(req.params.projectId); @@ -44,22 +45,26 @@ module.exports = [ }, }, }) - .then((data) => { - if (data.length === 0) { - req.log.debug('No attachment found in ES'); - return models.ProjectAttachment.findAll({ - where: { - projectId, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then(attachments => res.json(attachments)) - .catch(next); - } - req.log.debug('attachments found in ES'); - return res.json(data[0].inner_hits.attachments.hits.hits.map(hit => hit._source)); // eslint-disable-line no-underscore-dangle - }) - .catch(next); + .then((data) => { + if (data.length === 0) { + req.log.debug('No attachment found in ES'); + return models.ProjectAttachment.findAll({ + where: { + projectId, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }) + .catch(next); + } + req.log.debug('attachments found in ES'); + return data[0].inner_hits.attachments.hits.hits.map(hit => hit._source); // eslint-disable-line no-underscore-dangle + }) + // filter out attachments which user cannot see + .then(attachments => attachments.filter(attachment => + permissionUtils.hasReadAccessToAttachment(attachment, req), + )) + .then(attachments => res.json(attachments)) + .catch(next); }, ]; diff --git a/src/routes/attachments/list.spec.js b/src/routes/attachments/list.spec.js index 52203c7a..cf54c467 100644 --- a/src/routes/attachments/list.spec.js +++ b/src/routes/attachments/list.spec.js @@ -15,55 +15,64 @@ describe('Project Attachments download', () => { beforeEach((done) => { testUtil.clearDb() .then(() => testUtil.clearES()) - .then(() => { - models.Project.create({ - type: 'generic', - directProjectId: 1, - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + directProjectId: 1, + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + return models.ProjectMember.create({ + userId: testUtil.userIds.copilot, + projectId: project1.id, + role: 'copilot', + isPrimary: true, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - return models.ProjectMember.create({ - userId: 40051332, - projectId: project1.id, - role: 'copilot', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }).then(() => models.ProjectAttachment.bulkCreate([{ - projectId: project1.id, - title: 'test.txt', - description: 'blah', - contentType: 'application/unknown', - size: 12312, - category: null, - path: 'https://media.topcoder.com/projects/1/test.txt', - type: ATTACHMENT_TYPES.FILE, - tags: ['tag1', 'tag2'], - createdBy: testUtil.userIds.copilot, - updatedBy: 1, - }, { - projectId: project1.id, - title: 'link test 1', - description: 'link test description', - size: 123456, - category: null, - path: 'https://media.topcoder.com/projects/1/test2.txt', - type: ATTACHMENT_TYPES.LINK, - tags: ['tag3'], - createdBy: testUtil.userIds.copilot, - updatedBy: 1, - }]).then(() => done())); - }); + }).then(() => models.ProjectMember.create({ + userId: testUtil.userIds.member, + projectId: project1.id, + role: 'customer', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + })).then(() => models.ProjectAttachment.bulkCreate([{ + projectId: project1.id, + title: 'test.txt', + description: 'blah', + contentType: 'application/unknown', + size: 12312, + category: null, + path: 'https://media.topcoder.com/projects/1/test.txt', + type: ATTACHMENT_TYPES.FILE, + tags: ['tag1', 'tag2'], + createdBy: testUtil.userIds.copilot, + updatedBy: 1, + allowedUsers: [testUtil.userIds.member], + }, { + projectId: project1.id, + title: 'link test 1', + description: 'link test description', + size: 123456, + category: null, + path: 'https://media.topcoder.com/projects/1/test2.txt', + type: ATTACHMENT_TYPES.LINK, + tags: ['tag3'], + createdBy: testUtil.userIds.copilot, + updatedBy: 1, + allowedUsers: [testUtil.userIds.member2], + }]).then(() => done())); }); + }); }); after((done) => { @@ -77,37 +86,83 @@ describe('Project Attachments download', () => { .expect(403, done); }); - it('should return 403 for member', (done) => { + it('should return 403 for a regular user who is not a member of the project', (done) => { request(server) .get(`/v5/projects/${project1.id}/attachments`) .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, + Authorization: `Bearer ${testUtil.jwts.member2}`, }) .send() .expect(403, done); }); - it('should return 200 for manager', (done) => { + it('should not return attachments to a manager if they are not owner and not allowed', (done) => { request(server) .get(`/v5/projects/${project1.id}/attachments`) .set({ Authorization: `Bearer ${testUtil.jwts.manager}`, }) .send() - .expect(200, done); + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + + resJson.should.have.length(0); + + done(); + } + }); }); - it('should return 200 for copilot', (done) => { + it('should return attachments to its owner', (done) => { request(server) .get(`/v5/projects/${project1.id}/attachments`) .set({ Authorization: `Bearer ${testUtil.jwts.copilot}`, }) .send() - .expect(200, done); + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + + resJson.should.have.length(2); + resJson[0].createdBy.should.be.eql(testUtil.userIds.copilot); + resJson[1].createdBy.should.be.eql(testUtil.userIds.copilot); + + done(); + } + }); + }); + + it('should return attachments to the user who is allowed', (done) => { + request(server) + .get(`/v5/projects/${project1.id}/attachments`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .send() + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + + resJson.should.have.length(1); + resJson[0].allowedUsers.indexOf(testUtil.userIds.member).should.not.equal(-1); + + done(); + } + }); }); - it('should return 200 for admin', (done) => { + it('should return all attachments to admin', (done) => { request(server) .get(`/v5/projects/${project1.id}/attachments`) .set({ @@ -116,32 +171,78 @@ describe('Project Attachments download', () => { .send() .expect(200) .end((err, res) => { - const resJson = res.body; - resJson.should.have.length(2); - resJson[0].description.should.be.eql('blah'); - resJson[0].path.should.be.eql('https://media.topcoder.com/projects/1/test.txt'); - resJson[0].projectId.should.be.eql(project1.id); - resJson[0].type.should.be.eql(ATTACHMENT_TYPES.FILE); - resJson[0].createdBy.should.be.eql(testUtil.userIds.copilot); - resJson[0].updatedBy.should.be.eql(1); - should.exist(resJson[0].createdAt); - should.exist(resJson[0].updatedAt); - should.not.exist(resJson[0].deletedBy); - should.not.exist(resJson[0].deletedAt); - - resJson[1].projectId.should.be.eql(project1.id); - resJson[1].description.should.be.eql('link test description'); - resJson[1].path.should.be.eql('https://media.topcoder.com/projects/1/test2.txt'); - resJson[1].type.should.be.eql(ATTACHMENT_TYPES.LINK); - resJson[1].tags.should.be.eql(['tag3']); - resJson[1].createdBy.should.be.eql(testUtil.userIds.copilot); - resJson[1].updatedBy.should.be.eql(1); - should.exist(resJson[0].createdAt); - should.exist(resJson[0].updatedAt); - should.not.exist(resJson[0].deletedBy); - should.not.exist(resJson[0].deletedAt); - - done(); + if (err) { + done(err); + } else { + const resJson = res.body; + resJson.should.have.length(2); + resJson[0].description.should.be.eql('blah'); + resJson[0].path.should.be.eql('https://media.topcoder.com/projects/1/test.txt'); + resJson[0].projectId.should.be.eql(project1.id); + resJson[0].type.should.be.eql(ATTACHMENT_TYPES.FILE); + resJson[0].createdBy.should.be.eql(testUtil.userIds.copilot); + resJson[0].updatedBy.should.be.eql(1); + should.exist(resJson[0].createdAt); + should.exist(resJson[0].updatedAt); + should.not.exist(resJson[0].deletedBy); + should.not.exist(resJson[0].deletedAt); + + resJson[1].projectId.should.be.eql(project1.id); + resJson[1].description.should.be.eql('link test description'); + resJson[1].path.should.be.eql('https://media.topcoder.com/projects/1/test2.txt'); + resJson[1].type.should.be.eql(ATTACHMENT_TYPES.LINK); + resJson[1].tags.should.be.eql(['tag3']); + resJson[1].createdBy.should.be.eql(testUtil.userIds.copilot); + resJson[1].updatedBy.should.be.eql(1); + should.exist(resJson[0].createdAt); + should.exist(resJson[0].updatedAt); + should.not.exist(resJson[0].deletedBy); + should.not.exist(resJson[0].deletedAt); + + done(); + } + }); + }); + + it('should return all attachments using M2M token with "read:projects" scope', (done) => { + request(server) + .get(`/v5/projects/${project1.id}/attachments`) + .set({ + Authorization: `Bearer ${testUtil.m2m['read:projects']}`, + }) + .send() + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + resJson.should.have.length(2); + resJson[0].description.should.be.eql('blah'); + resJson[0].path.should.be.eql('https://media.topcoder.com/projects/1/test.txt'); + resJson[0].projectId.should.be.eql(project1.id); + resJson[0].type.should.be.eql(ATTACHMENT_TYPES.FILE); + resJson[0].createdBy.should.be.eql(testUtil.userIds.copilot); + resJson[0].updatedBy.should.be.eql(1); + should.exist(resJson[0].createdAt); + should.exist(resJson[0].updatedAt); + should.not.exist(resJson[0].deletedBy); + should.not.exist(resJson[0].deletedAt); + + resJson[1].projectId.should.be.eql(project1.id); + resJson[1].description.should.be.eql('link test description'); + resJson[1].path.should.be.eql('https://media.topcoder.com/projects/1/test2.txt'); + resJson[1].type.should.be.eql(ATTACHMENT_TYPES.LINK); + resJson[1].tags.should.be.eql(['tag3']); + resJson[1].createdBy.should.be.eql(testUtil.userIds.copilot); + resJson[1].updatedBy.should.be.eql(1); + should.exist(resJson[0].createdAt); + should.exist(resJson[0].updatedAt); + should.not.exist(resJson[0].deletedBy); + should.not.exist(resJson[0].deletedAt); + + done(); + } }); }); }); diff --git a/src/routes/attachments/update.js b/src/routes/attachments/update.js index b52b9960..176ef5b1 100644 --- a/src/routes/attachments/update.js +++ b/src/routes/attachments/update.js @@ -8,6 +8,7 @@ import { import models from '../../models'; import util from '../../util'; import { EVENT, RESOURCES } from '../../constants'; +import { PERMISSION } from '../../permissions/constants'; /** * API to update a project member. @@ -27,8 +28,8 @@ const updateProjectAttachmentValidation = { module.exports = [ // handles request validations validate(updateProjectAttachmentValidation), - permissions('project.updateAttachment'), - /** + permissions('projectAttachment.edit'), + /* * Update a attachment if the user has access */ (req, res, next) => { @@ -44,16 +45,25 @@ module.exports = [ }, }).then(existing => new Promise((accept, reject) => { if (!existing) { - // handle 404 + // handle 404 const err = new Error('project attachment not found for project id ' + `${projectId} and member id ${attachmentId}`); err.status = 404; - reject(err); - } else { - previousValue = _.cloneDeep(existing.get({ plain: true })); - _.extend(existing, updatedProps); - existing.save().then(accept).catch(reject); + return reject(err); } + previousValue = _.cloneDeep(existing.get({ plain: true })); + + if ( + previousValue.createdBy !== req.authUser.userId && + !util.hasPermissionByReq(PERMISSION.UPDATE_PROJECT_ATTACHMENT_NOT_OWN, req) + ) { + const err = new Error('You don\'t have permission to update attachment created by another user.'); + err.status = 403; + return reject(err); + } + + _.extend(existing, updatedProps); + return existing.save().then(accept).catch(reject); })).then((updated) => { req.log.debug('updated project attachment', JSON.stringify(updated, null, 2)); res.json(updated); diff --git a/src/routes/attachments/update.spec.js b/src/routes/attachments/update.spec.js index 80050d79..04b0254c 100644 --- a/src/routes/attachments/update.spec.js +++ b/src/routes/attachments/update.spec.js @@ -17,30 +17,38 @@ describe('Project Attachments update', () => { let link; beforeEach((done) => { testUtil.clearDb() - .then(() => { - models.Project.create({ - type: 'generic', - directProjectId: 1, - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + directProjectId: 1, + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + return models.ProjectMember.create({ + userId: 40051332, + projectId: project1.id, + role: 'copilot', + isPrimary: true, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - return models.ProjectMember.create({ - userId: 40051332, - projectId: project1.id, - role: 'copilot', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }).then(() => models.ProjectAttachment.create({ + }).then(() => models.ProjectMember.create({ + userId: 40051331, + projectId: project1.id, + role: 'customer', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + })) + .then(() => models.ProjectAttachment.create({ projectId: project1.id, title: 'test.txt', description: 'blah', @@ -68,12 +76,12 @@ describe('Project Attachments update', () => { createdBy: testUtil.userIds.copilot, updatedBy: 1, }).then((_link) => { - link = _link; - done(); - }); + link = _link; + done(); + }); })); - }); }); + }); }); after((done) => { @@ -186,6 +194,27 @@ describe('Project Attachments update', () => { }); }); + it('should update the project using M2M token with "write:projects" scope', (done) => { + request(server) + .patch(`/v5/projects/${project1.id}/attachments/${attachment.id}`) + .set({ + Authorization: `Bearer ${testUtil.m2m['write:projects']}`, + }) + .send({ title: 'updated title m2m', description: 'updated description m2m' }) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.title.should.equal('updated title m2m'); + resJson.description.should.equal('updated description m2m'); + done(); + } + }); + }); + describe('Bus api', () => { let createEventSpy; diff --git a/src/routes/form/revision/create.js b/src/routes/form/revision/create.js index 99c814f2..9642417d 100644 --- a/src/routes/form/revision/create.js +++ b/src/routes/form/revision/create.js @@ -60,7 +60,7 @@ module.exports = [ EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, RESOURCES.FORM_REVISION, createdEntity.toJSON()); - // Omit deletedAt, deletedBy + // Omit deletedAt, deletedBy res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); }) .catch(next)); diff --git a/src/routes/form/revision/create.spec.js b/src/routes/form/revision/create.spec.js index 3cfcf3c3..8c2cfdd6 100644 --- a/src/routes/form/revision/create.spec.js +++ b/src/routes/form/revision/create.spec.js @@ -60,10 +60,10 @@ describe('CREATE Form Revision', () => { it('should return 404 if missing key', (done) => { request(server) - .post('/v5/projects/metadata/form/no-exist-key/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/form/no-exist-key/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(404, done); @@ -71,10 +71,10 @@ describe('CREATE Form Revision', () => { it('should return 404 if missing version', (done) => { request(server) - .post('/v5/projects/metadata/form/dev/versions/100/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/form/dev/versions/100/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(404, done); @@ -97,10 +97,10 @@ describe('CREATE Form Revision', () => { it('should return 201 for admin', (done) => { request(server) - .post('/v5/projects/metadata/form/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/form/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -123,7 +123,7 @@ describe('CREATE Form Revision', () => { it('should return 403 for member', (done) => { request(server) - .post('/v5/projects/metadata/form/dev/versions/1/revisions') + .post('/v5/projects/metadata/form/dev/versions/1/revisions') .set({ Authorization: `Bearer ${testUtil.jwts.member}`, }) diff --git a/src/routes/form/revision/delete.js b/src/routes/form/revision/delete.js index e06b9f80..0c62e9d7 100644 --- a/src/routes/form/revision/delete.js +++ b/src/routes/form/revision/delete.js @@ -32,21 +32,21 @@ module.exports = [ revision: req.params.revision, }, }).then((form) => { - if (!form) { - const apiErr = new Error('Form not found for key' + + if (!form) { + const apiErr = new Error('Form not found for key' + ` ${req.params.key} version ${req.params.version} revision ${req.params.revision}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - return form.update({ - deletedBy: req.authUser.userId, - }); - }).then(form => form.destroy()) + apiErr.status = 404; + return Promise.reject(apiErr); + } + return form.update({ + deletedBy: req.authUser.userId, + }); + }).then(form => form.destroy()) .then((form) => { util.sendResourceToKafkaBus(req, EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.FORM_REVISION, - _.pick(form.toJSON(), 'id')); + RESOURCES.FORM_REVISION, + _.pick(form.toJSON(), 'id')); res.status(204).end(); }) .catch(next)); diff --git a/src/routes/form/revision/delete.spec.js b/src/routes/form/revision/delete.spec.js index 8aee319f..9e35fd77 100644 --- a/src/routes/form/revision/delete.spec.js +++ b/src/routes/form/revision/delete.spec.js @@ -10,29 +10,29 @@ import testUtil from '../../../tests/util'; const expectAfterDelete = (err, next) => { if (err) throw err; setTimeout(() => - models.Form.findOne({ - where: { - key: 'dev', - version: 1, - revision: 1, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.Form.findOne({ + where: { + key: 'dev', + version: 1, + revision: 1, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get('/v5/projects/metadata/form/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; @@ -78,34 +78,34 @@ describe('DELETE form revision', () => { it('should return 403 for member', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(403, done); }); it('should return 403 for copilot', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(403, done); }); it('should return 403 for manager', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(403, done); }); it('should return 404 for non-existed key', (done) => { request(server) - .delete('/v5/projects/metadata/form/no-existed-key/versions/1/revisions/1') + .delete('/v5/projects/metadata/form/no-existed-key/versions/1/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -114,7 +114,7 @@ describe('DELETE form revision', () => { it('should return 404 for non-existed version', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/100/revisions/1') + .delete('/v5/projects/metadata/form/dev/versions/100/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -124,7 +124,7 @@ describe('DELETE form revision', () => { it('should return 404 for non-existed revision', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1/revisions/100') + .delete('/v5/projects/metadata/form/dev/versions/1/revisions/100') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -133,17 +133,17 @@ describe('DELETE form revision', () => { it('should return 204, for admin', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .expect(204) .end(err => expectAfterDelete(err, done)); }); it('should return 204, for connect admin', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') + .delete('/v5/projects/metadata/form/dev/versions/1/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, }) diff --git a/src/routes/form/revision/get.js b/src/routes/form/revision/get.js index cc0ec5d5..b6784c61 100644 --- a/src/routes/form/revision/get.js +++ b/src/routes/form/revision/get.js @@ -43,35 +43,35 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No form found in ES'); - models.Form.findOne({ - where: { - key: req.params.key, - version: req.params.version, - revision: req.params.revision, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((form) => { - // Not found - if (!form) { - const apiErr = new Error('Form not found for key' + + .then((data) => { + if (data.length === 0) { + req.log.debug('No form found in ES'); + models.Form.findOne({ + where: { + key: req.params.key, + version: req.params.version, + revision: req.params.revision, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((form) => { + // Not found + if (!form) { + const apiErr = new Error('Form not found for key' + ` ${req.params.key} version ${req.params.version} revision ${req.params.revision}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(form); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('forms found in ES'); - res.json(data[0].inner_hits.forms.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(form); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('forms found in ES'); + res.json(data[0].inner_hits.forms.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/form/revision/get.spec.js b/src/routes/form/revision/get.spec.js index bdcdff23..1f4bf2d6 100644 --- a/src/routes/form/revision/get.spec.js +++ b/src/routes/form/revision/get.spec.js @@ -70,45 +70,45 @@ describe('GET a particular revision of specific version Form', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') - .expect(403, done); + .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/form/revision/list.js b/src/routes/form/revision/list.js index ab0ab9f9..68bc71a8 100644 --- a/src/routes/form/revision/list.js +++ b/src/routes/form/revision/list.js @@ -21,30 +21,30 @@ module.exports = [ permissions('form.view'), (req, res, next) => util.fetchFromES('forms') - .then((data) => { - if (data.forms.length === 0) { - req.log.debug('No form found in ES'); - models.Form.findAll({ - where: { - key: req.params.key, - version: req.params.version, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }).then((forms) => { - // Not found - if ((!forms) || (forms.length === 0)) { - const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + .then((data) => { + if (data.forms.length === 0) { + req.log.debug('No form found in ES'); + models.Form.findAll({ + where: { + key: req.params.key, + version: req.params.version, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }).then((forms) => { + // Not found + if ((!forms) || (forms.length === 0)) { + const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(forms); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('forms found in ES'); - res.json(data.forms); - } - }).catch(next), + res.json(forms); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('forms found in ES'); + res.json(data.forms); + } + }).catch(next), ]; diff --git a/src/routes/form/revision/list.spec.js b/src/routes/form/revision/list.spec.js index d239b03b..3a07ec39 100644 --- a/src/routes/form/revision/list.spec.js +++ b/src/routes/form/revision/list.spec.js @@ -72,45 +72,45 @@ describe('LIST form revisions', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions') - .expect(403, done); + .get('/v5/projects/metadata/form/dev/versions/1/revisions') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/form/version/create.js b/src/routes/form/version/create.js index 00a16119..3d1e2565 100644 --- a/src/routes/form/version/create.js +++ b/src/routes/form/version/create.js @@ -60,7 +60,7 @@ module.exports = [ EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, RESOURCES.FORM_VERSION, createdEntity.toJSON()); - // Omit deletedAt, deletedBy + // Omit deletedAt, deletedBy res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); }) .catch(next)); diff --git a/src/routes/form/version/create.spec.js b/src/routes/form/version/create.spec.js index f94eb023..acd1a11c 100644 --- a/src/routes/form/version/create.spec.js +++ b/src/routes/form/version/create.spec.js @@ -73,10 +73,10 @@ describe('CREATE Form version', () => { }); request(server) - .post('/v5/projects/metadata/form/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/form/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(invalidBody) .expect('Content-Type', /json/) .expect(400, done); @@ -84,10 +84,10 @@ describe('CREATE Form version', () => { it('should return 201 for admin', (done) => { request(server) - .post('/v5/projects/metadata/form/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/form/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -110,10 +110,10 @@ describe('CREATE Form version', () => { it('should return 403 for member', (done) => { request(server) - .post('/v5/projects/metadata/form/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .post('/v5/projects/metadata/form/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .send(body) .expect(403, done); }); diff --git a/src/routes/form/version/delete.js b/src/routes/form/version/delete.js index 05359a37..36e71e99 100644 --- a/src/routes/form/version/delete.js +++ b/src/routes/form/version/delete.js @@ -29,42 +29,42 @@ module.exports = [ version: req.params.version, }, }).then((allRevision) => { - if (allRevision.length === 0) { - const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - return models.Form.update( - { - deletedBy: req.authUser.userId, - }, { - where: { - key: req.params.key, - version: req.params.version, - }, - }); - }) - .then(() => models.Form.destroy({ - where: { - key: req.params.key, - version: req.params.version, - }, - })).then(deleted => models.Form.findAll({ - where: { - key: req.params.key, - version: req.params.version, - }, - paranoid: false, - order: [['deletedAt', 'DESC']], - limit: deleted, - })) - .then((forms) => { - _.map(forms, form => util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.FORM_VERSION, - _.pick(form.toJSON(), 'id'))); - res.status(204).end(); + if (allRevision.length === 0) { + const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } + return models.Form.update( + { + deletedBy: req.authUser.userId, + }, { + where: { + key: req.params.key, + version: req.params.version, + }, + }); }) - .catch(next)); + .then(() => models.Form.destroy({ + where: { + key: req.params.key, + version: req.params.version, + }, + })).then(deleted => models.Form.findAll({ + where: { + key: req.params.key, + version: req.params.version, + }, + paranoid: false, + order: [['deletedAt', 'DESC']], + limit: deleted, + })) + .then((forms) => { + _.map(forms, form => util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.FORM_VERSION, + _.pick(form.toJSON(), 'id'))); + res.status(204).end(); + }) + .catch(next)); }, ]; diff --git a/src/routes/form/version/delete.spec.js b/src/routes/form/version/delete.spec.js index 8aff6a9b..b3887d5f 100644 --- a/src/routes/form/version/delete.spec.js +++ b/src/routes/form/version/delete.spec.js @@ -10,25 +10,25 @@ import testUtil from '../../../tests/util'; const expectAfterDelete = (err, next) => { if (err) throw err; setTimeout(() => - models.Form.findAll({ - where: { - key: 'dev', - version: 1, - }, - paranoid: false, - }) - .then((forms) => { - if (forms.length === 0) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(forms[0].deletedAt); - chai.assert.isNotNull(forms[0].deletedBy); + models.Form.findAll({ + where: { + key: 'dev', + version: 1, + }, + paranoid: false, + }) + .then((forms) => { + if (forms.length === 0) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(forms[0].deletedAt); + chai.assert.isNotNull(forms[0].deletedBy); - chai.assert.isNotNull(forms[1].deletedAt); - chai.assert.isNotNull(forms[1].deletedBy); - next(); - } - }), 500); + chai.assert.isNotNull(forms[1].deletedAt); + chai.assert.isNotNull(forms[1].deletedBy); + next(); + } + }), 500); }; @@ -75,34 +75,34 @@ describe('DELETE form version', () => { it('should return 403 for member', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(403, done); }); it('should return 403 for copilot', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(403, done); }); it('should return 403 for manager', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(403, done); }); it('should return 404 for non-existed key', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev111/versions/1') + .delete('/v5/projects/metadata/form/dev111/versions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -111,7 +111,7 @@ describe('DELETE form version', () => { it('should return 404 for non-existed version', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/111') + .delete('/v5/projects/metadata/form/dev/versions/111') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -120,17 +120,17 @@ describe('DELETE form version', () => { it('should return 204, for admin', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .delete('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .expect(204) .end(err => expectAfterDelete(err, done)); }); it('should return 204, for connect admin', (done) => { request(server) - .delete('/v5/projects/metadata/form/dev/versions/1') + .delete('/v5/projects/metadata/form/dev/versions/1') .set({ Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, }) diff --git a/src/routes/form/version/get.js b/src/routes/form/version/get.js index 0779b9f5..6719770b 100644 --- a/src/routes/form/version/get.js +++ b/src/routes/form/version/get.js @@ -41,25 +41,25 @@ module.exports = [ }, sort: { 'forms.version': 'desc' }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No form found in ES'); - models.Form.latestRevisionOfLatestVersion(req.params.key) - .then((form) => { - if (form == null) { - const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - res.json(form); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('forms found in ES'); - res.json(data[0].inner_hits.forms.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + .then((data) => { + if (data.length === 0) { + req.log.debug('No form found in ES'); + models.Form.latestRevisionOfLatestVersion(req.params.key) + .then((form) => { + if (form == null) { + const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } + res.json(form); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('forms found in ES'); + res.json(data[0].inner_hits.forms.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/form/version/get.spec.js b/src/routes/form/version/get.spec.js index 326d4ef7..38dcef08 100644 --- a/src/routes/form/version/get.spec.js +++ b/src/routes/form/version/get.spec.js @@ -90,45 +90,45 @@ describe('GET a latest version of specific key of Form', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/form/dev') - .expect(403, done); + .get('/v5/projects/metadata/form/dev') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/form/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/form/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/form/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/form/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/form/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/form/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/form/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/form/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/form/version/getVersion.js b/src/routes/form/version/getVersion.js index d4167150..92abaf0a 100644 --- a/src/routes/form/version/getVersion.js +++ b/src/routes/form/version/getVersion.js @@ -43,26 +43,26 @@ module.exports = [ }, sort: { 'forms.revision': 'desc' }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No form found in ES'); - return models.Form.findOneWithLatestRevision(req.params) - .then((form) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No form found in ES'); + return models.Form.findOneWithLatestRevision(req.params) + .then((form) => { // Not found - if (!form) { - const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - res.json(form); - return Promise.resolve(); - }) - .catch(next); - } - req.log.debug('forms found in ES'); - res.json(data[0].inner_hits.forms.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - return Promise.resolve(); - }) - .catch(next); + if (!form) { + const apiErr = new Error(`Form not found for key ${req.params.key} version ${req.params.version}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } + res.json(form); + return Promise.resolve(); + }) + .catch(next); + } + req.log.debug('forms found in ES'); + res.json(data[0].inner_hits.forms.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + return Promise.resolve(); + }) + .catch(next); }, ]; diff --git a/src/routes/form/version/getVersion.spec.js b/src/routes/form/version/getVersion.spec.js index 14ac9096..862d6fa5 100644 --- a/src/routes/form/version/getVersion.spec.js +++ b/src/routes/form/version/getVersion.spec.js @@ -81,45 +81,45 @@ describe('GET a particular version of specific key of Form', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1') - .expect(403, done); + .get('/v5/projects/metadata/form/dev/versions/1') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/form/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/form/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/form/version/list.js b/src/routes/form/version/list.js index 383cec6f..8ae7e39b 100644 --- a/src/routes/form/version/list.js +++ b/src/routes/form/version/list.js @@ -19,39 +19,39 @@ module.exports = [ validate(schema), permissions('form.view'), (req, res, next) => - util.fetchFromES('forms') - .then((data) => { - if (data.forms.length === 0) { - req.log.debug('No form found in ES'); - models.Form.findAll({ - where: { - key: req.params.key, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((forms) => { - // Not found - if ((!forms) || (forms.length === 0)) { - const apiErr = new Error(`Form not found for key ${req.params.key}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + util.fetchFromES('forms') + .then((data) => { + if (data.forms.length === 0) { + req.log.debug('No form found in ES'); + models.Form.findAll({ + where: { + key: req.params.key, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((forms) => { + // Not found + if ((!forms) || (forms.length === 0)) { + const apiErr = new Error(`Form not found for key ${req.params.key}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - const latestForms = {}; - forms.forEach((element) => { - const isNewerRevision = (latestForms[element.version] != null) && + const latestForms = {}; + forms.forEach((element) => { + const isNewerRevision = (latestForms[element.version] != null) && (latestForms[element.version].revision < element.revision); - if ((latestForms[element.version] == null) || isNewerRevision) { - latestForms[element.version] = element; - } - }); - res.json(Object.values(latestForms)); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('forms found in ES'); - res.json(data.forms); - } - }).catch(next), + if ((latestForms[element.version] == null) || isNewerRevision) { + latestForms[element.version] = element; + } + }); + res.json(Object.values(latestForms)); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('forms found in ES'); + res.json(data.forms); + } + }).catch(next), ]; diff --git a/src/routes/form/version/list.spec.js b/src/routes/form/version/list.spec.js index 14977b5e..03616456 100644 --- a/src/routes/form/version/list.spec.js +++ b/src/routes/form/version/list.spec.js @@ -72,45 +72,45 @@ describe('LIST form versions', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions') - .expect(403, done); + .get('/v5/projects/metadata/form/dev/versions') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/form/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/form/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/form/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/form/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/form/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/form/version/update.js b/src/routes/form/version/update.js index b484f830..6d690a66 100644 --- a/src/routes/form/version/update.js +++ b/src/routes/form/version/update.js @@ -53,26 +53,26 @@ module.exports = [ } return Promise.resolve(forms[0]); }) - .then((form) => { - const revision = form.revision + 1; - const entity = { - version: req.params.version, - revision, - createdBy: req.authUser.userId, - updatedBy: req.authUser.userId, - key: req.params.key, - config: req.body.config, - }; - return models.Form.create(entity); - }) - .then((createdEntity) => { - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, - RESOURCES.FORM_VERSION, - createdEntity.toJSON()); - // Omit deletedAt, deletedBy - res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); - }) - .catch(next)); + .then((form) => { + const revision = form.revision + 1; + const entity = { + version: req.params.version, + revision, + createdBy: req.authUser.userId, + updatedBy: req.authUser.userId, + key: req.params.key, + config: req.body.config, + }; + return models.Form.create(entity); + }) + .then((createdEntity) => { + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, + RESOURCES.FORM_VERSION, + createdEntity.toJSON()); + // Omit deletedAt, deletedBy + res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); + }) + .catch(next)); }, ]; diff --git a/src/routes/form/version/update.spec.js b/src/routes/form/version/update.spec.js index 0bce1fd7..0f728dd0 100644 --- a/src/routes/form/version/update.spec.js +++ b/src/routes/form/version/update.spec.js @@ -63,10 +63,10 @@ describe('UPDATE Form version', () => { config: undefined, }); request(server) - .patch('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .patch('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(invalidBody) .expect('Content-Type', /json/) .expect(400, done); @@ -74,10 +74,10 @@ describe('UPDATE Form version', () => { it('should return 201 for admin', (done) => { request(server) - .patch('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .patch('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -100,10 +100,10 @@ describe('UPDATE Form version', () => { it('should return 403 for member', (done) => { request(server) - .patch('/v5/projects/metadata/form/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .patch('/v5/projects/metadata/form/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .send(body) .expect(403, done); }); diff --git a/src/routes/index.js b/src/routes/index.js index 96427c0f..29a180a0 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -115,11 +115,11 @@ router.route('/v5/projects/:projectId(\\d+)') router.route('/v5/projects/:projectId(\\d+)/scopeChangeRequests') .post(require('./scopeChangeRequests/create')); - // .get(require('./scopeChangeRequests/list')); +// .get(require('./scopeChangeRequests/list')); router.route('/v5/projects/:projectId(\\d+)/scopeChangeRequests/:requestId(\\d+)') // .get(require('./scopeChangeRequests/get')) .patch(require('./scopeChangeRequests/update')); - // .delete(require('./scopeChangeRequests/delete')); +// .delete(require('./scopeChangeRequests/delete')); router.route('/v5/projects/:projectId(\\d+)/members') .get(require('./projectMembers/list')) @@ -210,6 +210,7 @@ router.route('/v5/timelines/:timelineId(\\d+)') router.route('/v5/timelines/:timelineId(\\d+)/milestones') .post(require('./milestones/create')) + .patch(require('./milestones/bulkUpdate')) .get(require('./milestones/list')); router.route('/v5/timelines/:timelineId(\\d+)/milestones/:milestoneId(\\d+)') @@ -278,16 +279,16 @@ router.route('/v5/projects/metadata/priceConfig/:key/versions/:version(\\d+)/rev .post(require('./priceConfig/revision/create')); router.route('/v5/projects/metadata/priceConfig/:key') -.get(require('./priceConfig/version/get')); + .get(require('./priceConfig/version/get')); router.route('/v5/projects/metadata/priceConfig/:key/versions') -.get(require('./priceConfig/version/list')) -.post(require('./priceConfig/version/create')); + .get(require('./priceConfig/version/list')) + .post(require('./priceConfig/version/create')); router.route('/v5/projects/metadata/priceConfig/:key/versions/:version(\\d+)') -.get(require('./priceConfig/version/getVersion')) -.patch(require('./priceConfig/version/update')) -.delete(require('./priceConfig/version/delete')); + .get(require('./priceConfig/version/getVersion')) + .patch(require('./priceConfig/version/update')) + .delete(require('./priceConfig/version/delete')); // plan config router.route('/v5/projects/metadata/planConfig/:key/versions/:version(\\d+)/revisions/:revision(\\d+)') @@ -312,7 +313,7 @@ router.route('/v5/projects/metadata/planConfig/:key/versions/:version(\\d+)') // user level reports router.route('/v5/projects/reports/embed') -.get(require('./userReports/getEmbedReport')); + .get(require('./userReports/getEmbedReport')); // work streams router.route('/v5/projects/:projectId(\\d+)/workstreams') @@ -346,7 +347,7 @@ router.route('/v5/projects/:projectId(\\d+)/workstreams/:workStreamId(\\d+)/work router.route('/v5/projects/:projectId/reports/embed') -.get(require('./projectReports/getEmbedReport')); + .get(require('./projectReports/getEmbedReport')); router.route('/v5/projects/:projectId/reports') .get(require('./projectReports/getReport')); diff --git a/src/routes/metadata/list.js b/src/routes/metadata/list.js index 0d2e77de..d8fa73f4 100644 --- a/src/routes/metadata/list.js +++ b/src/routes/metadata/list.js @@ -1,4 +1,4 @@ - /** +/** * API to list all metadata */ import { middleware as tcMiddleware } from 'tc-core-library-js'; @@ -178,49 +178,49 @@ module.exports = [ // Disadvantage: // - we have to filter disabled Project Templates and Product Templates by JS util.fetchFromES(null, null, 'metadata') - .then((data) => { - const esDataToReturn = _.pick(data, metadataProperties); - // if some metadata properties are not returned from ES, then initialize such properties with empty array - // for consistency - metadataProperties.forEach((prop) => { - if (!esDataToReturn[prop]) { - esDataToReturn[prop] = []; - } - }); + .then((data) => { + const esDataToReturn = _.pick(data, metadataProperties); + // if some metadata properties are not returned from ES, then initialize such properties with empty array + // for consistency + metadataProperties.forEach((prop) => { + if (!esDataToReturn[prop]) { + esDataToReturn[prop] = []; + } + }); - // return only non-disabled Project Templates - if (esDataToReturn.projectTemplates && esDataToReturn.projectTemplates.length > 0) { - esDataToReturn.projectTemplates = _.filter(esDataToReturn.projectTemplates, { disabled: false }); - } + // return only non-disabled Project Templates + if (esDataToReturn.projectTemplates && esDataToReturn.projectTemplates.length > 0) { + esDataToReturn.projectTemplates = _.filter(esDataToReturn.projectTemplates, { disabled: false }); + } - // return only non-disabled Product Templates - if (esDataToReturn.productTemplates && esDataToReturn.productTemplates.length > 0) { - esDataToReturn.productTemplates = _.filter(esDataToReturn.productTemplates, { disabled: false }); - } + // return only non-disabled Product Templates + if (esDataToReturn.productTemplates && esDataToReturn.productTemplates.length > 0) { + esDataToReturn.productTemplates = _.filter(esDataToReturn.productTemplates, { disabled: false }); + } - // WARNING: `BuildingBlock` model contains sensitive data! - // - // We should NEVER return `privateConfig` property for `buildingBlocks`. - // For the DB we use hooks to always clear it out, see `src/models/buildingBlock.js`. - // For the ES so far we should always remember about it and filter it out. - if (esDataToReturn.buildingBlocks && esDataToReturn.buildingBlocks.length > 0) { - esDataToReturn.buildingBlocks = _.map( - esDataToReturn.buildingBlocks, - buildingBlock => _.omit(buildingBlock, 'privateConfig'), - ); - } + // WARNING: `BuildingBlock` model contains sensitive data! + // + // We should NEVER return `privateConfig` property for `buildingBlocks`. + // For the DB we use hooks to always clear it out, see `src/models/buildingBlock.js`. + // For the ES so far we should always remember about it and filter it out. + if (esDataToReturn.buildingBlocks && esDataToReturn.buildingBlocks.length > 0) { + esDataToReturn.buildingBlocks = _.map( + esDataToReturn.buildingBlocks, + buildingBlock => _.omit(buildingBlock, 'privateConfig'), + ); + } - // check if any data is returned from ES - const hasDataInES = _.some(esDataToReturn, propData => propData && propData.length > 0); + // check if any data is returned from ES + const hasDataInES = _.some(esDataToReturn, propData => propData && propData.length > 0); - if (hasDataInES) { - req.log.debug('Metadata is found in ES'); - return res.json(esDataToReturn); - } + if (hasDataInES) { + req.log.debug('Metadata is found in ES'); + return res.json(esDataToReturn); + } - req.log.debug('Metadata is not found in ES'); - return loadMetadataFromDb(req.query.includeAllReferred).then(dbDataToReturn => res.json(dbDataToReturn)); - }) - .catch(next); + req.log.debug('Metadata is not found in ES'); + return loadMetadataFromDb(req.query.includeAllReferred).then(dbDataToReturn => res.json(dbDataToReturn)); + }) + .catch(next); }, ]; diff --git a/src/routes/metadata/list.spec.js b/src/routes/metadata/list.spec.js index 67185f65..400034fb 100644 --- a/src/routes/metadata/list.spec.js +++ b/src/routes/metadata/list.spec.js @@ -239,17 +239,17 @@ const getObjToIndex = (items) => { describe('GET all metadata from DB', () => { before((done) => { testUtil.clearES() - .then(() => testUtil.clearDb()) - .then(() => models.ProjectTemplate.bulkCreate(projectTemplates)) - .then(() => models.ProductTemplate.bulkCreate(productTemplates)) - .then(() => models.MilestoneTemplate.bulkCreate(milestoneTemplates)) - .then(() => models.ProjectType.bulkCreate(projectTypes)) - .then(() => models.ProductCategory.bulkCreate(productCategories)) - .then(() => models.Form.bulkCreate(forms)) - .then(() => models.PriceConfig.bulkCreate(priceConfigs)) - .then(() => models.PlanConfig.bulkCreate(planConfigs)) - .then(() => models.BuildingBlock.bulkCreate(buildingBlocks)) - .then(() => done()); + .then(() => testUtil.clearDb()) + .then(() => models.ProjectTemplate.bulkCreate(projectTemplates)) + .then(() => models.ProductTemplate.bulkCreate(productTemplates)) + .then(() => models.MilestoneTemplate.bulkCreate(milestoneTemplates)) + .then(() => models.ProjectType.bulkCreate(projectTypes)) + .then(() => models.ProductCategory.bulkCreate(productCategories)) + .then(() => models.Form.bulkCreate(forms)) + .then(() => models.PriceConfig.bulkCreate(priceConfigs)) + .then(() => models.PlanConfig.bulkCreate(planConfigs)) + .then(() => models.BuildingBlock.bulkCreate(buildingBlocks)) + .then(() => done()); }); after((done) => { @@ -381,43 +381,43 @@ describe('GET all metadata from ES', () => { const esData = {}; testUtil.clearES() - .then(() => testUtil.clearDb()) - .then(() => models.ProjectTemplate.bulkCreate(projectTemplates, { returning: true })) - .then((created) => { esData.projectTemplates = getObjToIndex(created); }) - .then(() => models.ProductTemplate.bulkCreate(productTemplates, { returning: true })) - .then((created) => { esData.productTemplates = getObjToIndex(created); }) - .then(() => models.MilestoneTemplate.bulkCreate(milestoneTemplates, { returning: true })) - .then((created) => { esData.milestoneTemplates = getObjToIndex(created); }) - .then(() => models.ProjectType.bulkCreate(projectTypes, { returning: true })) - .then((created) => { esData.projectTypes = getObjToIndex(created); }) - .then(() => models.ProductCategory.bulkCreate(productCategories, { returning: true })) - .then((created) => { esData.productCategories = getObjToIndex(created); }) - .then(() => models.Form.bulkCreate(forms, { returning: true })) - .then((created) => { + .then(() => testUtil.clearDb()) + .then(() => models.ProjectTemplate.bulkCreate(projectTemplates, { returning: true })) + .then((created) => { esData.projectTemplates = getObjToIndex(created); }) + .then(() => models.ProductTemplate.bulkCreate(productTemplates, { returning: true })) + .then((created) => { esData.productTemplates = getObjToIndex(created); }) + .then(() => models.MilestoneTemplate.bulkCreate(milestoneTemplates, { returning: true })) + .then((created) => { esData.milestoneTemplates = getObjToIndex(created); }) + .then(() => models.ProjectType.bulkCreate(projectTypes, { returning: true })) + .then((created) => { esData.projectTypes = getObjToIndex(created); }) + .then(() => models.ProductCategory.bulkCreate(productCategories, { returning: true })) + .then((created) => { esData.productCategories = getObjToIndex(created); }) + .then(() => models.Form.bulkCreate(forms, { returning: true })) + .then((created) => { // only index form with key `productKey 1` - const v2Form = _(created).filter(c => c.key === 'productKey 1'); - esData.forms = getObjToIndex(v2Form); - }) - .then(() => models.PriceConfig.bulkCreate(priceConfigs, { returning: true })) - .then((created) => { + const v2Form = _(created).filter(c => c.key === 'productKey 1'); + esData.forms = getObjToIndex(v2Form); + }) + .then(() => models.PriceConfig.bulkCreate(priceConfigs, { returning: true })) + .then((created) => { // only index latest versions - const v2PriceConfigs = _(created).filter(c => c.version === 2); - esData.priceConfigs = getObjToIndex(v2PriceConfigs); - }) - .then(() => models.PlanConfig.bulkCreate(planConfigs, { returning: true })) - .then((created) => { + const v2PriceConfigs = _(created).filter(c => c.version === 2); + esData.priceConfigs = getObjToIndex(v2PriceConfigs); + }) + .then(() => models.PlanConfig.bulkCreate(planConfigs, { returning: true })) + .then((created) => { // only index latest versions - const v2PlanConfigs = _(created).filter(c => c.version === 2); - esData.planConfigs = getObjToIndex(v2PlanConfigs); - }) - .then(() => models.BuildingBlock.bulkCreate(buildingBlocks, { returning: true })) - .then((created) => { esData.buildingBlocks = getObjToIndex(created); }) - .then(() => server.services.es.index({ - index: ES_METADATA_INDEX, - type: ES_METADATA_TYPE, - body: esData, - })) - .then(() => done()); + const v2PlanConfigs = _(created).filter(c => c.version === 2); + esData.planConfigs = getObjToIndex(v2PlanConfigs); + }) + .then(() => models.BuildingBlock.bulkCreate(buildingBlocks, { returning: true })) + .then((created) => { esData.buildingBlocks = getObjToIndex(created); }) + .then(() => server.services.es.index({ + index: ES_METADATA_INDEX, + type: ES_METADATA_TYPE, + body: esData, + })) + .then(() => done()); }); after((done) => { diff --git a/src/routes/milestoneTemplates/clone.spec.js b/src/routes/milestoneTemplates/clone.spec.js index 4f233354..85ffaf33 100644 --- a/src/routes/milestoneTemplates/clone.spec.js +++ b/src/routes/milestoneTemplates/clone.spec.js @@ -115,8 +115,8 @@ const milestoneTemplates = [ describe('CLONE milestone template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductTemplate.bulkCreate(productTemplates)) - .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); + .then(() => models.ProductTemplate.bulkCreate(productTemplates)) + .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); }, ); after((done) => { diff --git a/src/routes/milestoneTemplates/create.js b/src/routes/milestoneTemplates/create.js index d72f727a..0c5b0ac9 100644 --- a/src/routes/milestoneTemplates/create.js +++ b/src/routes/milestoneTemplates/create.js @@ -81,26 +81,26 @@ module.exports = [ return Promise.resolve(); }), ) - .then((otherUpdated) => { + .then((otherUpdated) => { // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.MILESTONE_TEMPLATE_ADDED, - RESOURCES.MILESTONE_TEMPLATE, - result); - - // emit the event for other milestone templates order updated - _.map(otherUpdated, milestoneTemplate => util.sendResourceToKafkaBus( req, - EVENT.ROUTING_KEY.MILESTONE_TEMPLATE_UPDATED, + EVENT.ROUTING_KEY.MILESTONE_TEMPLATE_ADDED, RESOURCES.MILESTONE_TEMPLATE, - _.assign(_.pick(milestoneTemplate.toJSON(), 'id', 'order', 'updatedBy', 'updatedAt'))), - ); + result); + + // emit the event for other milestone templates order updated + _.map(otherUpdated, milestoneTemplate => + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.MILESTONE_TEMPLATE_UPDATED, + RESOURCES.MILESTONE_TEMPLATE, + _.assign(_.pick(milestoneTemplate.toJSON(), 'id', 'order', 'updatedBy', 'updatedAt'))), + ); - // Write to response - res.status(201).json(result); - }) - .catch(next); + // Write to response + res.status(201).json(result); + }) + .catch(next); }, ]; diff --git a/src/routes/milestoneTemplates/create.spec.js b/src/routes/milestoneTemplates/create.spec.js index 0b1bb3cb..d0cf0a56 100644 --- a/src/routes/milestoneTemplates/create.spec.js +++ b/src/routes/milestoneTemplates/create.spec.js @@ -96,8 +96,8 @@ const milestoneTemplates = [ describe('CREATE milestone template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductTemplate.bulkCreate(productTemplates)) - .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); + .then(() => models.ProductTemplate.bulkCreate(productTemplates)) + .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); }, ); after((done) => { diff --git a/src/routes/milestoneTemplates/delete.js b/src/routes/milestoneTemplates/delete.js index 0ab2f7e0..acf84b74 100644 --- a/src/routes/milestoneTemplates/delete.js +++ b/src/routes/milestoneTemplates/delete.js @@ -22,19 +22,19 @@ module.exports = [ validateMilestoneTemplate.validateIdParam, permissions('milestoneTemplate.delete'), (req, res, next) => models.sequelize.transaction(() => - // soft delete the record - req.milestoneTemplate.update({ deletedBy: req.authUser.userId }) - .then(entity => entity.destroy()), - ) - .then(() => { - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.MILESTONE_TEMPLATE_REMOVED, - RESOURCES.MILESTONE_TEMPLATE, - { id: req.params.milestoneTemplateId }); + // soft delete the record + req.milestoneTemplate.update({ deletedBy: req.authUser.userId }) + .then(entity => entity.destroy()), + ) + .then(() => { + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.MILESTONE_TEMPLATE_REMOVED, + RESOURCES.MILESTONE_TEMPLATE, + { id: req.params.milestoneTemplateId }); - res.status(204).end(); - }) - .catch(next), + res.status(204).end(); + }) + .catch(next), ]; diff --git a/src/routes/milestoneTemplates/delete.spec.js b/src/routes/milestoneTemplates/delete.spec.js index 25f61ad4..c2e379f9 100644 --- a/src/routes/milestoneTemplates/delete.spec.js +++ b/src/routes/milestoneTemplates/delete.spec.js @@ -124,8 +124,8 @@ const milestoneTemplates = [ describe('DELETE milestone template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductTemplate.bulkCreate(productTemplates)) - .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); + .then(() => models.ProductTemplate.bulkCreate(productTemplates)) + .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); }, ); after((done) => { diff --git a/src/routes/milestoneTemplates/get.js b/src/routes/milestoneTemplates/get.js index 2efdb3d3..fa7ce46e 100644 --- a/src/routes/milestoneTemplates/get.js +++ b/src/routes/milestoneTemplates/get.js @@ -32,13 +32,13 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No milestoneTemplate found in ES'); - return res.json(_.omit(req.milestoneTemplate.toJSON(), 'deletedAt', 'deletedBy')); - } - req.log.debug('milestoneTemplate found in ES'); - return res.json(data[0].inner_hits.milestoneTemplates.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - }) - .catch(next), + .then((data) => { + if (data.length === 0) { + req.log.debug('No milestoneTemplate found in ES'); + return res.json(_.omit(req.milestoneTemplate.toJSON(), 'deletedAt', 'deletedBy')); + } + req.log.debug('milestoneTemplate found in ES'); + return res.json(data[0].inner_hits.milestoneTemplates.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + }) + .catch(next), ]; diff --git a/src/routes/milestoneTemplates/get.spec.js b/src/routes/milestoneTemplates/get.spec.js index 42aada94..8b17a5e3 100644 --- a/src/routes/milestoneTemplates/get.spec.js +++ b/src/routes/milestoneTemplates/get.spec.js @@ -99,8 +99,8 @@ const milestoneTemplates = [ describe('GET milestone template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductTemplate.bulkCreate(productTemplates)) - .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); + .then(() => models.ProductTemplate.bulkCreate(productTemplates)) + .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); }, ); after((done) => { diff --git a/src/routes/milestoneTemplates/list.js b/src/routes/milestoneTemplates/list.js index 572b8364..1524195a 100644 --- a/src/routes/milestoneTemplates/list.js +++ b/src/routes/milestoneTemplates/list.js @@ -72,30 +72,30 @@ module.exports = [ } return util.fetchFromES('milestoneTemplates', query) - .then((data) => { - let milestoneTemplates = _.isArray(data.milestoneTemplates) ? - data.milestoneTemplates : data.milestoneTemplates.hits.hits; - if (milestoneTemplates.length === 0) { - req.log.debug('No milestoneTemplate found in ES'); - return models.MilestoneTemplate.findAll({ - where, - order: [sortColumnAndOrder], - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then(result => res.json(result)) - .catch(next); - } - req.log.debug('milestoneTemplates found in ES'); + .then((data) => { + let milestoneTemplates = _.isArray(data.milestoneTemplates) ? + data.milestoneTemplates : data.milestoneTemplates.hits.hits; + if (milestoneTemplates.length === 0) { + req.log.debug('No milestoneTemplate found in ES'); + return models.MilestoneTemplate.findAll({ + where, + order: [sortColumnAndOrder], + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }) + .then(result => res.json(result)) + .catch(next); + } + req.log.debug('milestoneTemplates found in ES'); // Get the milestoneTemplates - milestoneTemplates = _.map(milestoneTemplates, (m) => { - if (m._source) return m._source; // eslint-disable-line no-underscore-dangle - return m; - }); + milestoneTemplates = _.map(milestoneTemplates, (m) => { + if (m._source) return m._source; // eslint-disable-line no-underscore-dangle + return m; + }); // Sort - milestoneTemplates = _.orderBy(milestoneTemplates, [sortColumnAndOrder[0]], [sortColumnAndOrder[1]]); - return res.json(milestoneTemplates); - }) - .catch(next); + milestoneTemplates = _.orderBy(milestoneTemplates, [sortColumnAndOrder[0]], [sortColumnAndOrder[1]]); + return res.json(milestoneTemplates); + }) + .catch(next); }, ]; diff --git a/src/routes/milestoneTemplates/list.spec.js b/src/routes/milestoneTemplates/list.spec.js index 5a4b1567..eec38ef0 100644 --- a/src/routes/milestoneTemplates/list.spec.js +++ b/src/routes/milestoneTemplates/list.spec.js @@ -118,8 +118,8 @@ describe('LIST milestone template', () => { }); beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductTemplate.bulkCreate(productTemplates)) - .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); + .then(() => models.ProductTemplate.bulkCreate(productTemplates)) + .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); }, ); after((done) => { diff --git a/src/routes/milestoneTemplates/update.spec.js b/src/routes/milestoneTemplates/update.spec.js index ef76a799..d771dc6d 100644 --- a/src/routes/milestoneTemplates/update.spec.js +++ b/src/routes/milestoneTemplates/update.spec.js @@ -162,8 +162,8 @@ const milestoneTemplates = [ describe('UPDATE milestone template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductTemplate.bulkCreate(productTemplates)) - .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); + .then(() => models.ProductTemplate.bulkCreate(productTemplates)) + .then(() => { models.MilestoneTemplate.bulkCreate(milestoneTemplates).then(() => done()); }); }, ); after((done) => { diff --git a/src/routes/milestones/bulkUpdate.js b/src/routes/milestones/bulkUpdate.js new file mode 100644 index 00000000..61c05b80 --- /dev/null +++ b/src/routes/milestones/bulkUpdate.js @@ -0,0 +1,123 @@ +/** + * Bulk create/update/delete milestones + */ +import Promise from 'bluebird'; +import _ from 'lodash'; +import validate from 'express-validation'; +import Joi from 'joi'; +import { middleware as tcMiddleware } from 'tc-core-library-js'; +import util from '../../util'; +import validateTimeline from '../../middlewares/validateTimeline'; +import { EVENT, RESOURCES } from '../../constants'; +import models from '../../models'; +import { createMilestone, deleteMilestone, updateMilestone } from './commonHelper'; + +const permissions = tcMiddleware.permissions; + +const schema = { + params: { + timelineId: Joi.number().integer().positive().required(), + }, + body: Joi.array().items(Joi.object().keys({ + id: Joi.number().integer().positive(), + name: Joi.string().max(255).optional(), + description: Joi.string().max(255), + duration: Joi.number().integer().min(1).optional(), + startDate: Joi.date().required(), + actualStartDate: Joi.date().allow(null), + endDate: Joi.date().allow(null), + completionDate: Joi.date().allow(null), + status: Joi.string().max(45).optional(), + type: Joi.string().max(45).optional(), + details: Joi.object(), + order: Joi.number().integer().optional(), + plannedText: Joi.string().max(512).optional(), + activeText: Joi.string().max(512).optional(), + completedText: Joi.string().max(512).optional(), + blockedText: Joi.string().max(512).optional(), + hidden: Joi.boolean().optional(), + statusComment: Joi.string().when('status', { is: 'paused', then: Joi.required(), otherwise: Joi.optional() }), + createdAt: Joi.any().strip(), + updatedAt: Joi.any().strip(), + deletedAt: Joi.any().strip(), + createdBy: Joi.any().strip(), + updatedBy: Joi.any().strip(), + deletedBy: Joi.any().strip(), + })).required(), + options: { + contextRequest: true, + }, +}; + +module.exports = [ + validate(schema), + validateTimeline.validateTimelineIdParam, + permissions('milestone.bulkUpdate'), + (req, res, next) => models.sequelize.transaction(async (transaction) => { + const timelineId = req.params.timelineId; + const where = { timelineId }; + const { toKeep, toCreate } = req.body.reduce( + (acc, item) => { + if ({}.hasOwnProperty.call(item, 'id')) { + acc.toKeep.set(item.id, item); + } else { + acc.toCreate.push(item); + } + return acc; + }, + { toKeep: new Map(), toCreate: [] }); + const existing = await models.Milestone.findAll({ where }, { transaction }); + const { toUpdate, toDelete } = existing.reduce( + (acc, item) => { + if (toKeep.has(item.id)) { + acc.toUpdate.push([item, toKeep.get(item.id)]); + } else { + acc.toDelete.push(item); + } + return acc; + }, + { toDelete: [], toUpdate: [] }); + if (toUpdate.length < toKeep.size) { + const existingIds = new Set(existing.map(item => item.id)); + toKeep.forEach((v, id) => { + if (!existingIds.has(id)) { + const apiErr = new Error(`Milestone not found for milestone id ${id}`); + apiErr.status = 404; + throw apiErr; + } + }); + } + const created = await Promise.mapSeries( + toCreate, data => createMilestone(req.authUser, req.timeline, data, transaction)); + const deleted = await Promise.mapSeries( + toDelete, item => deleteMilestone(req.authUser, timelineId, item.id, transaction, item)); + const updated = await Promise.mapSeries( + toUpdate, ([item, data]) => updateMilestone(req.authUser, timelineId, data, transaction, item)); + return { created, deleted, updated }; + }) + .then(async ({ created, deleted, updated }) => { + [ + [created, EVENT.ROUTING_KEY.MILESTONE_ADDED], + [deleted, EVENT.ROUTING_KEY.MILESTONE_REMOVED], + ].forEach(([results, routingKey]) => + results.forEach(result => util.sendResourceToKafkaBus(req, routingKey, RESOURCES.MILESTONE, result)), + ); + + updated.forEach(({ updated: updatedMilestone, original: originalMilestone }) => { + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.MILESTONE_UPDATED, + RESOURCES.MILESTONE, + updatedMilestone, + originalMilestone, + ); + }); + + // return all the timeline milestones after all updates + const milestones = await req.timeline.getMilestones() + .map(milestone => _.omit(milestone.toJSON(), ['deletedAt', 'deletedBy'])); + + res.json(milestones); + }) + .catch(next), +]; diff --git a/src/routes/milestones/bulkUpdate.spec.js b/src/routes/milestones/bulkUpdate.spec.js new file mode 100644 index 00000000..f8177849 --- /dev/null +++ b/src/routes/milestones/bulkUpdate.spec.js @@ -0,0 +1,514 @@ +/* eslint-disable no-unused-expressions */ +/** + * Tests for bulkUpdate + */ +import _ from 'lodash'; +import chai from 'chai'; +import sinon from 'sinon'; +import request from 'supertest'; +import models from '../../models'; +import server from '../../app'; +import testUtil from '../../tests/util'; +import busApi from '../../services/busApi'; +import { RESOURCES, BUS_API_EVENT } from '../../constants'; + +const should = chai.should(); + +describe('BULK UPDATE Milestones', () => { + beforeEach((done) => { + testUtil.clearDb() + .then(() => { + models.Project.bulkCreate([ + { + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }, + { + type: 'generic', + billingAccountId: 2, + name: 'test2', + description: 'test project2', + status: 'draft', + details: {}, + createdBy: 2, + updatedBy: 2, + lastActivityAt: 1, + lastActivityUserId: '1', + deletedAt: '2018-05-15T00:00:00Z', + }, + ]) + .then(() => { + // Create member + models.ProjectMember.bulkCreate([ + { + userId: 40051332, + projectId: 1, + role: 'copilot', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }, + { + userId: 40051331, + projectId: 1, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }, + ]).then(() => + // Create phase + models.ProjectPhase.bulkCreate([ + { + projectId: 1, + name: 'test project phase 1', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json 2', + }, + createdBy: 1, + updatedBy: 1, + }, + { + projectId: 2, + name: 'test project phase 2', + status: 'active', + startDate: '2018-05-16T00:00:00Z', + endDate: '2018-05-16T12:00:00Z', + budget: 21.0, + progress: 1.234567, + details: { + message: 'This can be any json 2', + }, + createdBy: 2, + updatedBy: 2, + deletedAt: '2018-05-15T00:00:00Z', + }, + ])) + .then(() => + // Create timelines + models.Timeline.bulkCreate([ + { + name: 'name 1', + description: 'description 1', + startDate: '2018-05-02T00:00:00.000Z', + endDate: '2018-06-12T00:00:00.000Z', + reference: 'project', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + }, + { + name: 'name 2', + description: 'description 2', + startDate: '2018-05-12T00:00:00.000Z', + endDate: '2018-06-13T00:00:00.000Z', + reference: 'phase', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + }, + { + name: 'name 3', + description: 'description 3', + startDate: '2018-05-13T00:00:00.000Z', + endDate: '2018-06-14T00:00:00.000Z', + reference: 'phase', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + deletedAt: '2018-05-14T00:00:00.000Z', + }, + ]).then(() => models.Milestone.bulkCreate([ + { + id: 1, + timelineId: 1, + name: 'Milestone 1', + duration: 2, + startDate: '2018-05-13T00:00:00.000Z', + endDate: '2018-05-14T00:00:00.000Z', + completionDate: '2018-05-15T00:00:00.000Z', + status: 'active', + type: 'type1', + details: { + detail1: { + subDetail1A: 1, + subDetail1B: 2, + }, + detail2: [1, 2, 3], + }, + order: 1, + plannedText: 'plannedText 1', + activeText: 'activeText 1', + completedText: 'completedText 1', + blockedText: 'blockedText 1', + createdBy: 1, + updatedBy: 2, + createdAt: '2018-05-11T00:00:00.000Z', + updatedAt: '2018-05-11T00:00:00.000Z', + }, + { + id: 2, + timelineId: 1, + name: 'Milestone 2', + duration: 3, + startDate: '2018-05-14T00:00:00.000Z', + actualStartDate: '2018-05-14T00:00:00.000Z', + completionDate: '2018-05-15T00:00:00.000Z', + status: 'reviewed', + type: 'type2', + order: 2, + plannedText: 'plannedText 2', + activeText: 'activeText 2', + completedText: 'completedText 2', + blockedText: 'blockedText 2', + createdBy: 2, + updatedBy: 3, + createdAt: '2018-05-11T00:00:00.000Z', + updatedAt: '2018-05-11T00:00:00.000Z', + }, + { + id: 3, + timelineId: 1, + name: 'Milestone 3', + duration: 3, + startDate: '2018-05-14T00:00:00.000Z', + status: 'active', + type: 'type3', + order: 3, + plannedText: 'plannedText 3', + activeText: 'activeText 3', + completedText: 'completedText 3', + blockedText: 'blockedText 3', + createdBy: 2, + updatedBy: 3, + createdAt: '2018-05-11T00:00:00.000Z', + updatedAt: '2018-05-11T00:00:00.000Z', + }, + { + id: 4, + timelineId: 1, + name: 'Milestone 4', + duration: 3, + startDate: '2018-05-14T00:00:00.000Z', + status: 'active', + type: 'type4', + order: 4, + plannedText: 'plannedText 4', + activeText: 'activeText 4', + completedText: 'completedText 4', + blockedText: 'blockedText 4', + createdBy: 2, + updatedBy: 3, + createdAt: '2018-05-11T00:00:00.000Z', + updatedAt: '2018-05-11T00:00:00.000Z', + }, + { + id: 5, + timelineId: 1, + name: 'Milestone 5', + duration: 3, + startDate: '2018-05-14T00:00:00.000Z', + status: 'active', + type: 'type5', + order: 5, + plannedText: 'plannedText 5', + activeText: 'activeText 5', + completedText: 'completedText 5', + blockedText: 'blockedText 5', + createdBy: 2, + updatedBy: 3, + createdAt: '2018-05-11T00:00:00.000Z', + updatedAt: '2018-05-11T00:00:00.000Z', + deletedAt: '2018-05-11T00:00:00.000Z', + }, + { + id: 6, + timelineId: 1, + name: 'Milestone 6', + duration: 3, + startDate: '2018-05-14T00:00:00.000Z', + status: 'active', + type: 'type5', + order: 1, + plannedText: 'plannedText 6', + activeText: 'activeText 6', + completedText: 'completedText 6', + blockedText: 'blockedText 6', + createdBy: 2, + updatedBy: 3, + createdAt: '2018-05-11T00:00:00.000Z', + updatedAt: '2018-05-11T00:00:00.000Z', + }, + ]))) + .then(() => done()); + }); + }); + }); + + after((done) => { + testUtil.clearDb(done); + }); + + describe('PATCH /timelines/{timelineId}/milestones', () => { + const body = { + name: 'Milestone 1', + duration: 3, + description: 'description-updated', + status: 'draft', + type: 'type1-updated', + startDate: '2018-05-14T00:00:00.000Z', + details: { + detail1: { + subDetail1A: 0, + subDetail1C: 3, + }, + detail2: [4], + detail3: 3, + }, + order: 1, + plannedText: 'plannedText 1-updated', + activeText: 'activeText 1-updated', + completedText: 'completedText 1-updated', + blockedText: 'blockedText 1-updated', + hidden: true, + }; + it('should return 403 if user is not authenticated', (done) => { + request(server) + .patch('/v5/timelines/1/milestones') + .send([body]) + .expect(403, done); + }); + + it('should return 403 for member who is not in the project', (done) => { + request(server) + .patch('/v5/timelines/1/milestones') + .set({ + Authorization: `Bearer ${testUtil.jwts.member2}`, + }) + .send([body]) + .expect(403, done); + }); + + it('should return 403 for non-admin member updating the completionDate', (done) => { + const newBody = _.cloneDeep(body); + newBody.id = 2; + newBody.completionDate = '2019-01-16T00:00:00.000Z'; + request(server) + .patch('/v5/timelines/1/milestones') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send([newBody]) + .expect(403, done); + }); + + it('should return 403 for non-admin member updating the actualStartDate', (done) => { + const newBody = _.cloneDeep(body); + newBody.actualStartDate = '2018-05-15T00:00:00.000Z'; + newBody.id = 2; + request(server) + .patch('/v5/timelines/1/milestones') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send([newBody]) + .expect(403, done); + }); + + it('should return 404 for non-existed timeline', (done) => { + request(server) + .patch('/v5/timelines/1234/milestones') + .send([body]) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); + }); + + it('should return 404 for deleted timeline', (done) => { + request(server) + .patch('/v5/timelines/3/milestones') + .send([body]) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); + }); + + it('should return 404 for non-existed Milestone', (done) => { + const data = [Object.assign({}, body, { id: 111 })]; + request(server) + .patch('/v5/timelines/1/milestones') + .send(data) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); + }); + + it('should return 404 for deleted Milestone', (done) => { + const data = [Object.assign({}, body, { id: 5 })]; + request(server) + .patch('/v5/timelines/1/milestones') + .send(data) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); + }); + + it('should return 400 for invalid timelineId param', (done) => { + request(server) + .patch('/v5/timelines/0/milestones') + .send([body]) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(400, done); + }); + + it('should return 400 for invalid milestoneId param', (done) => { + const data = [Object.assign({}, body, { id: 0 })]; + request(server) + .patch('/v5/timelines/1/milestones') + .send(data) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(400, done); + }); + + it('should return 200 for admin doing creation, update, deletion operation', (done) => { + const data = [ + Object.assign({}, body, { id: 1, actualStartDate: '2018-05-15T00:00:00.000Z' }), + Object.assign({}, body, { name: 'Milestone to create in bulk' }), + ]; + request(server) + .patch('/v5/timelines/1/milestones') + .send(data) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const milestones = res.body; + + // check that milestone with id=1 is updated + const updatedMilestone = _.find(milestones, { id: 1 }); + should.exist(updatedMilestone); + updatedMilestone.actualStartDate.should.be.eql('2018-05-15T00:00:00.000Z'); + + // check that a new milestone is created + const createdMilestone = _.find(milestones, { name: 'Milestone to create in bulk' }); + should.exist(createdMilestone); + _.omit(createdMilestone, [ + 'id', + 'createdAt', + 'updatedAt', + 'statusHistory', + ]).should.eql(_.assign({}, body, { + name: 'Milestone to create in bulk', + actualStartDate: null, + completionDate: null, + endDate: null, + createdBy: 40051333, + updatedBy: 40051333, + timelineId: 1, + })); + + // check that all other milestones are deleted + milestones.length.should.be.eql(2); + + done(); + } + }); + }); + + describe('Bus api', () => { + let createEventSpy; + const sandbox = sinon.sandbox.create(); + + before((done) => { + // Wait for 500ms in order to wait for createEvent calls from previous tests to complete + testUtil.wait(done); + }); + + beforeEach(() => { + createEventSpy = sandbox.spy(busApi, 'createEvent'); + }); + + afterEach(() => { + sandbox.restore(); + }); + + it('sends send correct BUS API messages when milestone are bulk updated', (done) => { + const data = [ + Object.assign({}, body, { id: 1, actualStartDate: '2018-05-15T00:00:00.000Z' }), + Object.assign({}, body, { name: 'Milestone to create in bulk' }), + ]; + request(server) + .patch('/v5/timelines/1/milestones') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(data) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_UPDATED, sinon.match({ + resource: RESOURCES.MILESTONE, + id: 1, + })).should.be.true; + + createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_ADDED, sinon.match({ + resource: RESOURCES.MILESTONE, + name: 'Milestone to create in bulk', + })).should.be.true; + + createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_REMOVED, sinon.match({ + resource: RESOURCES.MILESTONE, + id: 2, + })).should.be.true; + + createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_REMOVED, sinon.match({ + resource: RESOURCES.MILESTONE, + id: 3, + })).should.be.true; + + createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_REMOVED, sinon.match({ + resource: RESOURCES.MILESTONE, + id: 4, + })).should.be.true; + + createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_REMOVED, sinon.match({ + resource: RESOURCES.MILESTONE, + id: 6, + })).should.be.true; + + done(); + }); + } + }); + }); + }); + }); +}); diff --git a/src/routes/milestones/commonHelper.js b/src/routes/milestones/commonHelper.js new file mode 100644 index 00000000..a5aed781 --- /dev/null +++ b/src/routes/milestones/commonHelper.js @@ -0,0 +1,213 @@ +/** + * Common functionality for milestone endpoints + */ +import _ from 'lodash'; +import moment from 'moment'; +import config from 'config'; +import models from '../../models'; +import { MILESTONE_STATUS, ADMIN_ROLES } from '../../constants'; +import util from '../../util'; + +const validStatuses = JSON.parse(config.get('VALID_STATUSES_BEFORE_PAUSED')); + +/** + * Create new milestone + * @param {Object} authUser The current user + * @param {Object} timeline The timeline of milestone + * @param {Object} data The updated data + * @param {Object} transaction The transaction to use + * @returns {Object} The updated milestone + * @throws {Error} If something went wrong + */ +async function createMilestone(authUser, timeline, data, transaction) { + // eslint-disable-next-line + const userId = authUser.userId; + const entity = Object.assign({}, data, { createdBy: userId, updatedBy: userId, timelineId: timeline.id }); + if (entity.startDate < timeline.startDate) { + const apiErr = new Error('Milestone startDate must not be before the timeline startDate'); + apiErr.status = 400; + throw apiErr; + } + // Circumvent postgresql duplicate key error, see https://stackoverflow.com/questions/50834623/sequelizejs-error-duplicate-key-value-violates-unique-constraint-message-pkey + await models.sequelize.query('SELECT setval(\'milestones_id_seq\', (SELECT MAX(id) FROM "milestones"))', + { raw: true, transaction }); + const result = await models.Milestone.create(entity, { transaction }); + return _.omit(result.toJSON(), ['deletedBy', 'deletedAt']); +} + +/** + * Delete single milestone + * @param {Object} authUser The current user + * @param {String|Number} timelineId The timeline id of milestone + * @param {String|Number} id The milestone id + * @param {Object} transaction The transaction to use + * @param {Object} [item] The milestone to delete + * @returns {Object} Object with id field for milestone id + * @throws {Error} If something went wrong + */ +async function deleteMilestone(authUser, timelineId, id, transaction, item) { + const where = { id, timelineId }; + const milestone = item || await models.Milestone.findOne({ where }, { transaction }); + if (!milestone) { + const apiErr = new Error(`Milestone not found for milestone id ${id}`); + apiErr.status = 404; + throw apiErr; + } + await milestone.update({ deletedBy: authUser.userId }, { transaction }); + await milestone.destroy({ transaction }); + return { id }; +} + +/** + * Update single milestone + * @param {Object} authUser The current user + * @param {String|Number} timelineId The timeline id of milestone + * @param {Object} data The updated data + * @param {Object} transaction The transaction to use + * @param {Object} [item] The item to update + * @returns {{updated: Object, original: Object}} The updated and original milestones + * @throws {Error} If something went wrong + */ +async function updateMilestone(authUser, timelineId, data, transaction, item) { + const id = data.id; + const where = { + timelineId, + id, + }; + const entityToUpdate = Object.assign({}, data, { + updatedBy: authUser.userId, + timelineId, + }); + + delete entityToUpdate.id; + + const milestone = item || await models.Milestone.findOne({ where }, { transaction }); + if (!milestone) { + const apiErr = new Error(`Milestone not found for milestone id ${id}`); + apiErr.status = 404; + throw apiErr; + } + + const original = milestone.toJSON(); + + if (entityToUpdate.status === MILESTONE_STATUS.PAUSED && !validStatuses.includes(milestone.status)) { + const validStatutesStr = validStatuses.join(', '); + const apiErr = new Error(`Milestone can only be paused from the next statuses: ${validStatutesStr}`); + apiErr.status = 400; + throw apiErr; + } + if (entityToUpdate.status === 'resume') { + if (milestone.status !== MILESTONE_STATUS.PAUSED) { + const apiErr = new Error('Milestone status isn\'t paused'); + apiErr.status = 400; + throw apiErr; + } + const statusHistory = await models.StatusHistory.findAll({ + where: { referenceId: id }, + order: [['createdAt', 'desc'], ['id', 'desc']], + attributes: ['status', 'id'], + limit: 2, + raw: true, + }, { transaction }); + if (statusHistory.length !== 2) { + const apiErr = new Error('No previous status is found'); + apiErr.status = 500; + throw apiErr; + } + entityToUpdate.status = statusHistory[1].status; + } + + // only admins can update values of 'completionDate' and 'actualStartDate' if they are already set + const isUpdatedCompletionDate = milestone.completionDate && entityToUpdate.completionDate + && !moment(milestone.completionDate).isSame(entityToUpdate.completionDate); + const isUpdatedActualStartDate = milestone.actualStartDate && entityToUpdate.actualStartDate + && !moment(milestone.actualStartDate).isSame(entityToUpdate.actualStartDate); + + + if ( + (isUpdatedCompletionDate || isUpdatedActualStartDate) + && !util.hasPermission({ topcoderRoles: ADMIN_ROLES }, authUser) + ) { + const apiErr = new Error('You are not allowed to perform this action.'); + apiErr.status = 403; + throw apiErr; + } + + if ( + entityToUpdate.completionDate && + (entityToUpdate.actualStartDate || milestone.actualStartDate) && + moment.utc(entityToUpdate.completionDate).isBefore( + moment.utc(entityToUpdate.actualStartDate || milestone.actualStartDate), + 'day', + ) + ) { + const apiErr = new Error('The milestone completionDate should be greater or equal to actualStartDate.'); + apiErr.status = 400; + throw apiErr; + } + // Comment this code for now and disable respective unit tests + // Most likely it has to be removed from the server, as otherwise client-side cannot properly + // control bulk updates of several milestones, as some milestones could be automatically updated by this logic + // which would lead to the unexpected results client-side. + /* + const durationChanged = {}.hasOwnProperty.call(entityToUpdate, 'duration') && + entityToUpdate.duration !== milestone.duration; + const statusChanged = {}.hasOwnProperty.call(entityToUpdate, 'status') && + entityToUpdate.status !== milestone.status; + const completionDateChanged = {}.hasOwnProperty.call(entityToUpdate, 'completionDate') && + !_.isEqual(milestone.completionDate, entityToUpdate.completionDate); + const today = moment + .utc() + .hours(0) + .minutes(0) + .seconds(0) + .milliseconds(0); + + entityToUpdate.details = util.mergeJsonObjects(milestone.details, entityToUpdate.details); + let actualStartDateChanged = false; + if (statusChanged) { + switch (entityToUpdate.status) { + case MILESTONE_STATUS.COMPLETED: + entityToUpdate.completionDate = entityToUpdate.completionDate || today; + entityToUpdate.duration = moment.utc(entityToUpdate.completionDate) + .diff(entityToUpdate.actualStartDate, 'days') + 1; + break; + case MILESTONE_STATUS.ACTIVE: + entityToUpdate.actualStartDate = today; + actualStartDateChanged = true; + break; + default: + } + } + // Updates the end date of the milestone if: + // 1. if duration of the milestone is udpated, update its end date + // OR + // 2. if actual start date is updated, updating the end date of the activated milestone because + // early or late start of milestone, we are essentially changing the end schedule of the milestone + if (durationChanged || actualStartDateChanged) { + const updatedStartDate = actualStartDateChanged ? entityToUpdate.actualStartDate : milestone.startDate; + const updatedDuration = _.get(entityToUpdate, 'duration', milestone.duration); + entityToUpdate.endDate = moment.utc(updatedStartDate).add(updatedDuration - 1, 'days').toDate(); + } + + // if completionDate has changed + if (!statusChanged && completionDateChanged) { + entityToUpdate.duration = moment.utc(entityToUpdate.completionDate) + .diff(entityToUpdate.actualStartDate, 'days') + 1; + entityToUpdate.status = MILESTONE_STATUS.COMPLETED; + } + */ + + const result = await milestone.update(entityToUpdate, { comment: entityToUpdate.statusComment, transaction }); + return { + original: _.omit(original, ['deletedBy', 'deletedAt']), + updated: _.omit(result.toJSON(), ['deletedBy', 'deletedAt']), + }; +} + + +module.exports = { + createMilestone, + deleteMilestone, + updateMilestone, +}; diff --git a/src/routes/milestones/create.js b/src/routes/milestones/create.js index 08cda372..18db3ced 100644 --- a/src/routes/milestones/create.js +++ b/src/routes/milestones/create.js @@ -2,14 +2,13 @@ * API to add a milestone */ import validate from 'express-validation'; -import _ from 'lodash'; import Joi from 'joi'; import { middleware as tcMiddleware } from 'tc-core-library-js'; -import Sequelize from 'sequelize'; import util from '../../util'; import validateTimeline from '../../middlewares/validateTimeline'; import models from '../../models'; import { EVENT, RESOURCES } from '../../constants'; +import { createMilestone } from './commonHelper'; const permissions = tcMiddleware.permissions; @@ -25,7 +24,7 @@ const schema = { startDate: Joi.date().required(), actualStartDate: Joi.date().allow(null), endDate: Joi.date().min(Joi.ref('startDate')).allow(null), - completionDate: Joi.date().min(Joi.ref('startDate')).allow(null), + completionDate: Joi.date().allow(null), status: Joi.string().max(45).required(), type: Joi.string().max(45).required(), details: Joi.object(), @@ -50,98 +49,15 @@ module.exports = [ // for checking by the permissions middleware validateTimeline.validateTimelineIdParam, permissions('milestone.create'), - (req, res, next) => { - const entity = _.assign(req.body, { - createdBy: req.authUser.userId, - updatedBy: req.authUser.userId, - timelineId: req.params.timelineId, - }); - let result; - - // Validate startDate is not earlier than timeline startDate - let error; - if (req.body.startDate < req.timeline.startDate) { - error = 'Milestone startDate must not be before the timeline startDate'; - } - if (error) { - const apiErr = new Error(error); - apiErr.status = 400; - return next(apiErr); - } - - return models.sequelize.transaction(() => - // Save to DB - models.Milestone.create(entity) - .then((createdEntity) => { - // Omit deletedAt, deletedBy - result = _.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy'); - - // Increase the order of the other milestones in the same timeline, - // which have `order` >= this milestone order - return models.Milestone.update({ order: Sequelize.literal('"order" + 1') }, { - where: { - timelineId: result.timelineId, - id: { $ne: result.id }, - order: { $gte: result.order }, - }, - }); - }) - .then((updatedCount) => { - if (updatedCount) { - return models.Milestone.findAll({ - where: { - timelineId: result.timelineId, - id: { $ne: result.id }, - order: { $gte: result.order + 1 }, - }, - order: [['updatedAt', 'DESC']], - limit: updatedCount[0], - }); - } - return Promise.resolve(); - }), - ) - .then((otherUpdated) => { - // Send event to bus - req.log.debug('Sending event to RabbitMQ bus for milestone %d', result.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.MILESTONE_ADDED, - result, - { correlationId: req.id }, - ); - - // NOTE So far this logic is implemented in RabbitMQ handler of MILESTONE_ADDED - // Even though we send this event to the Kafka, the "project-processor-es" shouldn't process it. - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.MILESTONE_ADDED, - RESOURCES.MILESTONE, - result); - - // NOTE So far this logic is implemented in RabbitMQ handler of MILESTONE_ADDED - // Even though we send these events to the Kafka, the "project-processor-es" shouldn't process them. - // - // We don't process these event in "project-processor-es" - // because it will make 'version conflict' error in ES. - // The order of the other milestones need to be updated in the PROJECT_PHASE_UPDATED event handler - _.map(otherUpdated, milestone => + (req, res, next) => + models.sequelize.transaction(t => createMilestone(req.authUser, req.timeline, req.body, t)) + .then((result) => { util.sendResourceToKafkaBus( req, - EVENT.ROUTING_KEY.MILESTONE_UPDATED, + EVENT.ROUTING_KEY.MILESTONE_ADDED, RESOURCES.MILESTONE, - _.assign(_.pick(milestone.toJSON(), 'id', 'order', 'updatedBy', 'updatedAt')), - // Pass the same object as original milestone even though, their time has changed. - // So far we don't use time properties in the handler so it's ok. But in general, we should pass - // the original milestones. <- TODO - _.assign(_.pick(milestone.toJSON(), 'id', 'order', 'updatedBy', 'updatedAt')), - null, // no route - true, // don't send event to Notification Service as the main event here is updating one milestone - ), - ); - - // Write to the response - res.status(201).json(result); - return Promise.resolve(); - }) - .catch(next); - }, + result); + res.status(201).json(result); + }) + .catch(next), ]; diff --git a/src/routes/milestones/create.spec.js b/src/routes/milestones/create.spec.js index 271e1d2f..588d42bb 100644 --- a/src/routes/milestones/create.spec.js +++ b/src/routes/milestones/create.spec.js @@ -10,7 +10,7 @@ import server from '../../app'; import testUtil from '../../tests/util'; import models from '../../models'; import busApi from '../../services/busApi'; -import { EVENT, RESOURCES, BUS_API_EVENT, CONNECT_NOTIFICATION_EVENT } from '../../constants'; +import { RESOURCES, BUS_API_EVENT } from '../../constants'; const should = chai.should(); @@ -72,72 +72,72 @@ describe('CREATE milestone', () => { }, ]).then(() => // Create phase - models.ProjectPhase.bulkCreate([ - { - projectId: projectId1, - name: 'test project phase 1', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json 2', - }, - createdBy: 1, - updatedBy: 1, - }, - { - projectId: projectId2, - name: 'test project phase 2', - status: 'active', - startDate: '2018-05-16T00:00:00Z', - endDate: '2018-05-16T12:00:00Z', - budget: 21.0, - progress: 1.234567, - details: { - message: 'This can be any json 2', - }, - createdBy: 2, - updatedBy: 2, - deletedAt: '2018-05-15T00:00:00Z', - }, - ])) + models.ProjectPhase.bulkCreate([ + { + projectId: projectId1, + name: 'test project phase 1', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json 2', + }, + createdBy: 1, + updatedBy: 1, + }, + { + projectId: projectId2, + name: 'test project phase 2', + status: 'active', + startDate: '2018-05-16T00:00:00Z', + endDate: '2018-05-16T12:00:00Z', + budget: 21.0, + progress: 1.234567, + details: { + message: 'This can be any json 2', + }, + createdBy: 2, + updatedBy: 2, + deletedAt: '2018-05-15T00:00:00Z', + }, + ])) .then(() => // Create timelines - models.Timeline.bulkCreate([ - { - name: 'name 1', - description: 'description 1', - startDate: '2018-05-02T00:00:00.000Z', - endDate: '2018-06-12T00:00:00.000Z', - reference: 'project', - referenceId: 1, - createdBy: 1, - updatedBy: 1, - }, - { - name: 'name 2', - description: 'description 2', - startDate: '2018-05-12T00:00:00.000Z', - endDate: '2018-06-13T00:00:00.000Z', - reference: 'phase', - referenceId: 1, - createdBy: 1, - updatedBy: 1, - }, - { - name: 'name 3', - description: 'description 3', - startDate: '2018-05-13T00:00:00.000Z', - endDate: '2018-06-14T00:00:00.000Z', - reference: 'phase', - referenceId: 1, - createdBy: 1, - updatedBy: 1, - deletedAt: '2018-05-14T00:00:00.000Z', - }, - ])) + models.Timeline.bulkCreate([ + { + name: 'name 1', + description: 'description 1', + startDate: '2018-05-02T00:00:00.000Z', + endDate: '2018-06-12T00:00:00.000Z', + reference: 'project', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + }, + { + name: 'name 2', + description: 'description 2', + startDate: '2018-05-12T00:00:00.000Z', + endDate: '2018-06-13T00:00:00.000Z', + reference: 'phase', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + }, + { + name: 'name 3', + description: 'description 3', + startDate: '2018-05-13T00:00:00.000Z', + endDate: '2018-06-14T00:00:00.000Z', + reference: 'phase', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + deletedAt: '2018-05-14T00:00:00.000Z', + }, + ])) .then(() => { // Create milestones models.Milestone.bulkCreate([ @@ -430,14 +430,7 @@ describe('CREATE milestone', () => { // validate statusHistory should.exist(resJson.statusHistory); resJson.statusHistory.should.be.an('array'); - resJson.statusHistory.length.should.be.eql(1); - resJson.statusHistory.forEach((statusHistory) => { - statusHistory.reference.should.be.eql('milestone'); - statusHistory.referenceId.should.be.eql(resJson.id); - }); - - // eslint-disable-next-line no-unused-expressions - server.services.pubsub.publish.calledWith(EVENT.ROUTING_KEY.MILESTONE_ADDED).should.be.true; + resJson.statusHistory.length.should.be.eql(0); // Verify 'order' of the other milestones models.Milestone.findAll({ where: { timelineId: 1 } }) @@ -446,9 +439,9 @@ describe('CREATE milestone', () => { if (milestone.id === 11) { milestone.order.should.be.eql(1); } else if (milestone.id === 12) { - milestone.order.should.be.eql(2 + 1); + milestone.order.should.be.eql(1 + 1); } else if (milestone.id === 13) { - milestone.order.should.be.eql(3 + 1); + milestone.order.should.be.eql(2 + 1); } }); @@ -556,7 +549,7 @@ describe('CREATE milestone', () => { done(err); } else { testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(4); + createEventSpy.callCount.should.be.eql(2); // added a new milestone createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_ADDED, sinon.match({ @@ -566,25 +559,6 @@ describe('CREATE milestone', () => { order: 2, })).should.be.true; - // as order of the next milestones after the added one have been updated, we send events about their update - createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_UPDATED, sinon.match({ - resource: RESOURCES.MILESTONE, - order: 3, - })).should.be.true; - createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_UPDATED, sinon.match({ - resource: RESOURCES.MILESTONE, - order: 4, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MILESTONE_ADDED, sinon.match({ - projectId: 1, - projectName: 'test1', - projectUrl: 'https://local.topcoder-dev.com/projects/1', - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; - done(); }); } diff --git a/src/routes/milestones/delete.js b/src/routes/milestones/delete.js index ade643c7..b287fd53 100644 --- a/src/routes/milestones/delete.js +++ b/src/routes/milestones/delete.js @@ -8,6 +8,7 @@ import models from '../../models'; import util from '../../util'; import { EVENT, RESOURCES } from '../../constants'; import validateTimeline from '../../middlewares/validateTimeline'; +import { deleteMilestone } from './commonHelper'; const permissions = tcMiddleware.permissions; @@ -24,49 +25,17 @@ module.exports = [ // checking by the permissions middleware validateTimeline.validateTimelineIdParam, permissions('milestone.delete'), - (req, res, next) => { - const where = { - timelineId: req.params.timelineId, - id: req.params.milestoneId, - }; - - return models.sequelize.transaction(() => - // Find the milestone - models.Milestone.findOne({ - where, + (req, res, next) => + models + .sequelize + .transaction(t => deleteMilestone(req.authUser, req.params.timelineId, req.params.milestoneId, t)) + .then((deleted) => { + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.MILESTONE_REMOVED, + RESOURCES.MILESTONE, + deleted); + res.status(204).end(); }) - .then((milestone) => { - // Not found - if (!milestone) { - const apiErr = new Error(`Milestone not found for milestone id ${req.params.milestoneId}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - - // Update the deletedBy, and soft delete - return milestone.update({ deletedBy: req.authUser.userId }) - .then(() => milestone.destroy()); - }), - ) - .then((deleted) => { - // Send event to bus - req.log.debug('Sending event to RabbitMQ bus for milestone %d', deleted.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.MILESTONE_REMOVED, - deleted, - { correlationId: req.id }, - ); - - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.MILESTONE_REMOVED, - RESOURCES.MILESTONE, - { id: deleted.id }); - - // Write to response - res.status(204).end(); - return Promise.resolve(); - }) - .catch(next); - }, + .catch(next), ]; diff --git a/src/routes/milestones/delete.spec.js b/src/routes/milestones/delete.spec.js index a505e0d5..8fd62c0c 100644 --- a/src/routes/milestones/delete.spec.js +++ b/src/routes/milestones/delete.spec.js @@ -9,7 +9,7 @@ import chai from 'chai'; import models from '../../models'; import server from '../../app'; import testUtil from '../../tests/util'; -import { EVENT, RESOURCES, BUS_API_EVENT, CONNECT_NOTIFICATION_EVENT } from '../../constants'; +import { RESOURCES, BUS_API_EVENT } from '../../constants'; import busApi from '../../services/busApi'; const should = chai.should(); // eslint-disable-line no-unused-vars @@ -317,12 +317,7 @@ describe('DELETE milestone', () => { .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) - .expect(204) - .end(err => expectAfterDelete(1, 1, err, () => { - // eslint-disable-next-line no-unused-expressions - server.services.pubsub.publish.calledWith(EVENT.ROUTING_KEY.MILESTONE_REMOVED).should.be.true; - done(); - })); + .expect(204, done); }); it('should return 204, for connect admin, if timeline was successfully removed', (done) => { @@ -401,15 +396,6 @@ describe('DELETE milestone', () => { id: 1, })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MILESTONE_REMOVED, sinon.match({ - projectId: 1, - projectName: 'test1', - projectUrl: 'https://local.topcoder-dev.com/projects/1', - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; - done(); }); } diff --git a/src/routes/milestones/get.js b/src/routes/milestones/get.js index 5c33994d..c283b8f9 100644 --- a/src/routes/milestones/get.js +++ b/src/routes/milestones/get.js @@ -41,29 +41,29 @@ module.exports = [ }, }, }, 'timeline') - .then((data) => { - if (data.length === 0) { - req.log.debug('No milestone found in ES'); - // Find the milestone - models.Milestone.findOne({ where }) - .then((milestone) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No milestone found in ES'); + // Find the milestone + models.Milestone.findOne({ where }) + .then((milestone) => { // Not found - if (!milestone) { - const apiErr = new Error(`Milestone not found for milestone id ${req.params.milestoneId}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!milestone) { + const apiErr = new Error(`Milestone not found for milestone id ${req.params.milestoneId}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - // Write to response - res.json(_.omit(milestone.toJSON(), ['deletedBy', 'deletedAt'])); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('milestone found in ES'); - res.json(data[0].inner_hits.milestones.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + // Write to response + res.json(_.omit(milestone.toJSON(), ['deletedBy', 'deletedAt'])); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('milestone found in ES'); + res.json(data[0].inner_hits.milestones.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/milestones/get.spec.js b/src/routes/milestones/get.spec.js index f541eb02..3607a427 100644 --- a/src/routes/milestones/get.spec.js +++ b/src/routes/milestones/get.spec.js @@ -63,72 +63,72 @@ describe('GET milestone', () => { ]) .then(() => // Create phase - models.ProjectPhase.bulkCreate([ - { - projectId: 1, - name: 'test project phase 1', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json 2', - }, - createdBy: 1, - updatedBy: 1, - }, - { - projectId: 2, - name: 'test project phase 2', - status: 'active', - startDate: '2018-05-16T00:00:00Z', - endDate: '2018-05-16T12:00:00Z', - budget: 21.0, - progress: 1.234567, - details: { - message: 'This can be any json 2', - }, - createdBy: 2, - updatedBy: 2, - deletedAt: '2018-05-15T00:00:00Z', - }, - ])) + models.ProjectPhase.bulkCreate([ + { + projectId: 1, + name: 'test project phase 1', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json 2', + }, + createdBy: 1, + updatedBy: 1, + }, + { + projectId: 2, + name: 'test project phase 2', + status: 'active', + startDate: '2018-05-16T00:00:00Z', + endDate: '2018-05-16T12:00:00Z', + budget: 21.0, + progress: 1.234567, + details: { + message: 'This can be any json 2', + }, + createdBy: 2, + updatedBy: 2, + deletedAt: '2018-05-15T00:00:00Z', + }, + ])) .then(() => // Create timelines - models.Timeline.bulkCreate([ - { - name: 'name 1', - description: 'description 1', - startDate: '2018-05-11T00:00:00.000Z', - endDate: '2018-05-12T00:00:00.000Z', - reference: 'project', - referenceId: 1, - createdBy: 1, - updatedBy: 1, - }, - { - name: 'name 2', - description: 'description 2', - startDate: '2018-05-12T00:00:00.000Z', - endDate: '2018-05-13T00:00:00.000Z', - reference: 'phase', - referenceId: 1, - createdBy: 1, - updatedBy: 1, - }, - { - name: 'name 3', - description: 'description 3', - startDate: '2018-05-13T00:00:00.000Z', - endDate: '2018-05-14T00:00:00.000Z', - reference: 'phase', - referenceId: 1, - createdBy: 1, - updatedBy: 1, - deletedAt: '2018-05-14T00:00:00.000Z', - }, - ])) + models.Timeline.bulkCreate([ + { + name: 'name 1', + description: 'description 1', + startDate: '2018-05-11T00:00:00.000Z', + endDate: '2018-05-12T00:00:00.000Z', + reference: 'project', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + }, + { + name: 'name 2', + description: 'description 2', + startDate: '2018-05-12T00:00:00.000Z', + endDate: '2018-05-13T00:00:00.000Z', + reference: 'phase', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + }, + { + name: 'name 3', + description: 'description 3', + startDate: '2018-05-13T00:00:00.000Z', + endDate: '2018-05-14T00:00:00.000Z', + reference: 'phase', + referenceId: 1, + createdBy: 1, + updatedBy: 1, + deletedAt: '2018-05-14T00:00:00.000Z', + }, + ])) .then(() => { // Create milestones models.Milestone.bulkCreate([ diff --git a/src/routes/milestones/update.js b/src/routes/milestones/update.js index 6704a964..feffabd0 100644 --- a/src/routes/milestones/update.js +++ b/src/routes/milestones/update.js @@ -2,92 +2,16 @@ * API to update a milestone */ import validate from 'express-validation'; -import _ from 'lodash'; -import moment from 'moment'; -import config from 'config'; import Joi from 'joi'; -import Sequelize from 'sequelize'; import { middleware as tcMiddleware } from 'tc-core-library-js'; import util from '../../util'; import validateTimeline from '../../middlewares/validateTimeline'; -import { EVENT, RESOURCES, MILESTONE_STATUS, ADMIN_ROLES } from '../../constants'; +import { EVENT, RESOURCES } from '../../constants'; import models from '../../models'; +import { updateMilestone } from './commonHelper'; const permissions = tcMiddleware.permissions; -/** - * Cascades endDate/completionDate changes to all milestones with a greater order than the given one. - * @param {Object} origMilestone the original milestone that was updated - * @param {Object} updMilestone the milestone that was updated - * @returns {Promise} a promise that resolves to the last found milestone. If no milestone exists with an - * order greater than the passed updMilestone, the promise will resolve to the passed - * updMilestone - */ -function updateComingMilestones(origMilestone, updMilestone) { - // flag to indicate if the milestone in picture, is updated for completionDate field or not - const completionDateChanged = !_.isEqual(origMilestone.completionDate, updMilestone.completionDate); - const today = moment.utc().hours(0).minutes(0).seconds(0) - .milliseconds(0); - // updated milestone's start date, pefers actual start date over scheduled start date - const updMSStartDate = updMilestone.actualStartDate ? updMilestone.actualStartDate : updMilestone.startDate; - // calculates schedule end date for the milestone based on start date and duration - let updMilestoneEndDate = moment.utc(updMSStartDate).add(updMilestone.duration - 1, 'days').toDate(); - // if the milestone, in context, is completed, overrides the end date to the completion date - updMilestoneEndDate = updMilestone.completionDate ? updMilestone.completionDate : updMilestoneEndDate; - let originalMilestones; - return models.Milestone.findAll({ - where: { - timelineId: updMilestone.timelineId, - order: { $gt: updMilestone.order }, - }, - }).then((affectedMilestones) => { - originalMilestones = affectedMilestones.map(am => _.omit(am.toJSON(), 'deletedAt', 'deletedBy')); - const comingMilestones = _.sortBy(affectedMilestones, 'order'); - // calculates the schedule start date for the next milestone - let startDate = moment.utc(updMilestoneEndDate).add(1, 'days').toDate(); - let firstMilestoneFound = false; - const promises = _.map(comingMilestones, (_milestone) => { - const milestone = _milestone; - - // Update the milestone startDate if different than the iterated startDate - if (!_.isEqual(milestone.startDate, startDate)) { - milestone.startDate = startDate; - milestone.updatedBy = updMilestone.updatedBy; - } - - // Calculate the endDate, and update it if different - const endDate = moment.utc(milestone.startDate).add(milestone.duration - 1, 'days').toDate(); - if (!_.isEqual(milestone.endDate, endDate)) { - milestone.endDate = endDate; - milestone.updatedBy = updMilestone.updatedBy; - } - - // if completionDate is alerted, update status of the first non hidden milestone after the current one - if (!firstMilestoneFound && completionDateChanged && !milestone.hidden) { - // activate next milestone - milestone.status = MILESTONE_STATUS.ACTIVE; - milestone.actualStartDate = today; - firstMilestoneFound = true; - } - - // if milestone is not hidden, update the startDate for the next milestone, otherwise keep the same startDate for next milestone - if (!milestone.hidden) { - // Set the next startDate value to the next day after completionDate if present or the endDate - startDate = moment.utc(milestone.completionDate - ? milestone.completionDate - : milestone.endDate).add(1, 'days').toDate(); - } - return milestone.save(); - }); - - // Resolve promise with all original and updated milestones - return Promise.all(promises).then(updatedMilestones => ({ - originalMilestones, - updatedMilestones: updatedMilestones.map(um => _.omit(um.toJSON(), 'deletedAt', 'deletedBy')), - })); - }); -} - const schema = { params: { timelineId: Joi.number().integer().positive().required(), @@ -127,234 +51,23 @@ module.exports = [ // and set to request params for checking by the permissions middleware validateTimeline.validateTimelineIdParam, permissions('milestone.edit'), - (req, res, next) => { - const where = { - timelineId: req.params.timelineId, - id: req.params.milestoneId, - }; - const entityToUpdate = _.assign(req.body, { - updatedBy: req.authUser.userId, - timelineId: req.params.timelineId, - }); - - const timeline = req.timeline; - const originalTimeline = _.omit(timeline.toJSON(), 'deletedAt', 'deletedBy'); - - let original; - let updated; - - return models.sequelize.transaction(() => - // Find the milestone - models.Milestone.findOne({ where }) - .then(async (milestone) => { - // Not found - if (!milestone) { - const apiErr = new Error(`Milestone not found for milestone id ${req.params.milestoneId}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - const validStatuses = JSON.parse(config.get('VALID_STATUSES_BEFORE_PAUSED')); - if (entityToUpdate.status === MILESTONE_STATUS.PAUSED && !validStatuses.includes(milestone.status)) { - const validStatutesStr = validStatuses.join(', '); - const apiErr = new Error(`Milestone can only be paused from the next statuses: ${validStatutesStr}`); - apiErr.status = 400; - return Promise.reject(apiErr); - } - - if (entityToUpdate.status === 'resume') { - if (milestone.status !== MILESTONE_STATUS.PAUSED) { - const apiErr = new Error('Milestone status isn\'t paused'); - apiErr.status = 400; - return Promise.reject(apiErr); - } - const statusHistory = await models.StatusHistory.findAll({ - where: { referenceId: milestone.id }, - order: [['createdAt', 'desc'], ['id', 'desc']], - attributes: ['status', 'id'], - limit: 2, - raw: true, - }); - if (statusHistory.length === 2) { - entityToUpdate.status = statusHistory[1].status; - } else { - const apiErr = new Error('No previous status is found'); - apiErr.status = 500; - return Promise.reject(apiErr); - } - } - - if (entityToUpdate.completionDate || entityToUpdate.actualStartDate) { - if (!util.hasPermissionByReq({ topcoderRoles: ADMIN_ROLES }, req)) { - const apiErr = new Error('You are not authorized to perform this action'); - apiErr.status = 403; - return Promise.reject(apiErr); - } - } - - if ( - entityToUpdate.completionDate && - (entityToUpdate.actualStartDate || milestone.actualStartDate) && - moment.utc(entityToUpdate.completionDate).isBefore( - moment.utc(entityToUpdate.actualStartDate || milestone.actualStartDate), - 'day', - ) - ) { - const apiErr = new Error('The milestone completionDate should be greater or equal to actualStartDate.'); - apiErr.status = 400; - return Promise.reject(apiErr); - } - - original = _.omit(milestone.toJSON(), ['deletedAt', 'deletedBy']); - const durationChanged = entityToUpdate.duration && entityToUpdate.duration !== milestone.duration; - const statusChanged = entityToUpdate.status && entityToUpdate.status !== milestone.status; - const completionDateChanged = entityToUpdate.completionDate - && !_.isEqual(milestone.completionDate, entityToUpdate.completionDate); - const today = moment.utc().hours(0).minutes(0).seconds(0) - .milliseconds(0); - - // Merge JSON fields - entityToUpdate.details = util.mergeJsonObjects(milestone.details, entityToUpdate.details); - - let actualStartDateCanged = false; - // if status has changed - if (statusChanged) { - // if status has changed to be completed, set the compeltionDate if not provided - if (entityToUpdate.status === MILESTONE_STATUS.COMPLETED) { - entityToUpdate.completionDate = entityToUpdate.completionDate ? entityToUpdate.completionDate : today; - entityToUpdate.duration = moment.utc(entityToUpdate.completionDate) - .diff(entityToUpdate.actualStartDate, 'days') + 1; - } - // if status has changed to be active, set the startDate to today - if (entityToUpdate.status === MILESTONE_STATUS.ACTIVE) { - // NOTE: not updating startDate as activating a milestone should not update the scheduled start date - // entityToUpdate.startDate = today; - // should update actual start date - entityToUpdate.actualStartDate = today; - actualStartDateCanged = true; - } - } - - // Updates the end date of the milestone if: - // 1. if duration of the milestone is udpated, update its end date - // OR - // 2. if actual start date is updated, updating the end date of the activated milestone because - // early or late start of milestone, we are essentially changing the end schedule of the milestone - if (durationChanged || actualStartDateCanged) { - const updatedStartDate = actualStartDateCanged ? entityToUpdate.actualStartDate : milestone.startDate; - const updatedDuration = _.get(entityToUpdate, 'duration', milestone.duration); - entityToUpdate.endDate = moment.utc(updatedStartDate).add(updatedDuration - 1, 'days').toDate(); - } - - // if completionDate has changed - if (!statusChanged && completionDateChanged) { - entityToUpdate.duration = moment.utc(entityToUpdate.completionDate) - .diff(entityToUpdate.actualStartDate, 'days') + 1; - entityToUpdate.status = MILESTONE_STATUS.COMPLETED; - } - - // Update - return milestone.update(entityToUpdate, { comment: entityToUpdate.statusComment }); - }) - .then((updatedMilestone) => { - // Omit deletedAt, deletedBy - updated = _.omit(updatedMilestone.toJSON(), 'deletedAt', 'deletedBy'); - - // Update order of the other milestones only if the order was changed - if (original.order === updated.order) { - return Promise.resolve(); - } - - return models.Milestone.count({ - where: { - timelineId: updated.timelineId, - id: { $ne: updated.id }, - order: updated.order, - }, - }) - .then((count) => { - if (count === 0) { - return Promise.resolve(); - } - - // Increase the order from M to K: if there is an item with order K, - // orders from M+1 to K should be made M to K-1 - if (original.order < updated.order) { - return models.Milestone.update({ order: Sequelize.literal('"order" - 1') }, { - where: { - timelineId: updated.timelineId, - id: { $ne: updated.id }, - order: { $between: [original.order + 1, updated.order] }, - }, - }); - } - - // Decrease the order from M to K: if there is an item with order K, - // orders from K to M-1 should be made K+1 to M - return models.Milestone.update({ order: Sequelize.literal('"order" + 1') }, { - where: { - timelineId: updated.timelineId, - id: { $ne: updated.id }, - order: { $between: [updated.order, original.order - 1] }, - }, - }); - }); - }) - .then(() => { - // we need to recalculate change in fields because we update some fields before making actual update - const needToCascade = !_.isEqual(original.completionDate, updated.completionDate) // completion date changed - || original.duration !== updated.duration // duration changed - || original.actualStartDate !== updated.actualStartDate; // actual start date updated - req.log.debug('needToCascade', needToCascade); - // Update dates of the other milestones only if cascade updates needed - if (needToCascade) { - return updateComingMilestones(original, updated) - .then(({ originalMilestones, updatedMilestones }) => { - // finds the last milestone updated - // if no milestone is updated by updateComingMilestones method, it means the current milestone is the last one - const lastTimelineMilestone = updatedMilestones.length ? _.last(updatedMilestones) : updated; - if (!_.isEqual(lastTimelineMilestone.endDate, timeline.endDate)) { - timeline.endDate = lastTimelineMilestone.endDate; - timeline.updatedBy = lastTimelineMilestone.updatedBy; - return timeline.save().then(() => ({ originalMilestones, updatedMilestones })); - } - return Promise.resolve({ originalMilestones, updatedMilestones }); - }); - } - return Promise.resolve({}); - }), - ) - .then(({ originalMilestones, updatedMilestones }) => { - const cascadedMilestones = _.map(originalMilestones, om => ({ - original: om, updated: _.find(updatedMilestones, um => um.id === om.id), - })); - const cascadedUpdates = { milestones: cascadedMilestones }; - // if there is a change in timeline, add it to the cascadedUpdates - if (originalTimeline.updatedAt !== timeline.updatedAt) { - cascadedUpdates.timeline = { - original: originalTimeline, - updated: _.omit(timeline.toJSON(), 'deletedAt', 'deletedBy'), - }; - } - // Send event to bus - req.log.debug('Sending event to RabbitMQ bus for milestone %d', updated.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.MILESTONE_UPDATED, - { original, updated, cascadedUpdates }, - { correlationId: req.id }, - ); - - // emit the event - // we cannot use `util.sendResourceToKafkaBus` as we have to pass a custom param `cascadedUpdates` - req.app.emit(EVENT.ROUTING_KEY.MILESTONE_UPDATED, { - req, - resource: _.assign({ resource: RESOURCES.MILESTONE }, updated), - originalResource: _.assign({ resource: RESOURCES.MILESTONE }, original), - cascadedUpdates, - }); - - // Write to response - res.json(updated); - return Promise.resolve(); - }) - .catch(next); - }, + (req, res, next) => + models + .sequelize + .transaction(t => updateMilestone( + req.authUser, + req.params.timelineId, + Object.assign({}, req.body, { id: req.params.milestoneId }), + t)) + .then(({ updated, original }) => { + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.MILESTONE_UPDATED, + RESOURCES.MILESTONE, + updated, + original, + ); + res.json(updated); + }) + .catch(next), ]; diff --git a/src/routes/milestones/update.spec.js b/src/routes/milestones/update.spec.js index bf8b1c7e..36195575 100644 --- a/src/routes/milestones/update.spec.js +++ b/src/routes/milestones/update.spec.js @@ -11,7 +11,7 @@ import models from '../../models'; import server from '../../app'; import testUtil from '../../tests/util'; import busApi from '../../services/busApi'; -import { EVENT, RESOURCES, MILESTONE_STATUS, BUS_API_EVENT, CONNECT_NOTIFICATION_EVENT } from '../../constants'; +import { RESOURCES, MILESTONE_STATUS, BUS_API_EVENT, CONNECT_NOTIFICATION_EVENT } from '../../constants'; const should = chai.should(); @@ -166,6 +166,7 @@ describe('UPDATE Milestone', () => { name: 'Milestone 2', duration: 3, startDate: '2018-05-14T00:00:00.000Z', + actualStartDate: '2018-05-14T00:00:00.000Z', status: 'reviewed', type: 'type2', order: 2, @@ -317,7 +318,7 @@ describe('UPDATE Milestone', () => { const newBody = _.cloneDeep(body); newBody.actualStartDate = '2018-05-15T00:00:00.000Z'; request(server) - .patch('/v5/timelines/1/milestones/1') + .patch('/v5/timelines/1/milestones/2') .set({ Authorization: `Bearer ${testUtil.jwts.manager}`, }) @@ -325,6 +326,30 @@ describe('UPDATE Milestone', () => { .expect(403, done); }); + it('should return 200 for non-admin member setting the completionDate', (done) => { + const newBody = _.cloneDeep(body); + newBody.completionDate = '2019-01-16T00:00:00.000Z'; + request(server) + .patch('/v5/timelines/1/milestones/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send(newBody) + .expect(200, done); + }); + + it('should return 200 for non-admin member setting the actualStartDate', (done) => { + const newBody = _.cloneDeep(body); + newBody.actualStartDate = '2018-05-15T00:00:00.000Z'; + request(server) + .patch('/v5/timelines/1/milestones/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send(newBody) + .expect(200, done); + }); + it('should return 404 for non-existed timeline', (done) => { request(server) .patch('/v5/timelines/1234/milestones/1') @@ -530,7 +555,7 @@ describe('UPDATE Milestone', () => { resJson.status.should.be.eql(body.status); resJson.type.should.be.eql(body.type); resJson.details.should.be.eql({ - detail1: { subDetail1A: 0, subDetail1B: 2, subDetail1C: 3 }, + detail1: { subDetail1A: 0, subDetail1C: 3 }, detail2: [4], detail3: 3, }); @@ -550,15 +575,12 @@ describe('UPDATE Milestone', () => { // validate statusHistory should.exist(resJson.statusHistory); resJson.statusHistory.should.be.an('array'); - resJson.statusHistory.length.should.be.eql(2); + resJson.statusHistory.length.should.be.eql(1); resJson.statusHistory.forEach((statusHistory) => { statusHistory.reference.should.be.eql('milestone'); statusHistory.referenceId.should.be.eql(resJson.id); }); - // eslint-disable-next-line no-unused-expressions - server.services.pubsub.publish.calledWith(EVENT.ROUTING_KEY.MILESTONE_UPDATED).should.be.true; - done(); }); }); @@ -575,26 +597,21 @@ describe('UPDATE Milestone', () => { .send(_.assign({}, body, { order: 4 })) // 1 to 4 .expect(200) .end(() => { - // Milestone 1: order 4 - // Milestone 2: order 2 - 1 = 1 - // Milestone 3: order 3 - 1 = 2 - // Milestone 4: order 4 - 1 = 3 models.Milestone.findByPk(1) .then((milestone) => { milestone.order.should.be.eql(4); }) .then(() => models.Milestone.findByPk(2)) .then((milestone) => { - milestone.order.should.be.eql(1); + milestone.order.should.be.eql(2); }) .then(() => models.Milestone.findByPk(3)) .then((milestone) => { - milestone.order.should.be.eql(2); + milestone.order.should.be.eql(3); }) .then(() => models.Milestone.findByPk(4)) .then((milestone) => { - milestone.order.should.be.eql(3); - + milestone.order.should.be.eql(4); done(); }); }); @@ -649,26 +666,21 @@ describe('UPDATE Milestone', () => { .send(_.assign({}, body, { order: 2 })) // 4 to 2 .expect(200) .end(() => { - // Milestone 1: order 1 - // Milestone 2: order 3 - // Milestone 3: order 4 - // Milestone 4: order 2 models.Milestone.findByPk(1) .then((milestone) => { milestone.order.should.be.eql(1); }) .then(() => models.Milestone.findByPk(2)) .then((milestone) => { - milestone.order.should.be.eql(3); + milestone.order.should.be.eql(2); }) .then(() => models.Milestone.findByPk(3)) .then((milestone) => { - milestone.order.should.be.eql(4); + milestone.order.should.be.eql(3); }) .then(() => models.Milestone.findByPk(4)) .then((milestone) => { milestone.order.should.be.eql(2); - done(); }); }); @@ -858,16 +870,13 @@ describe('UPDATE Milestone', () => { .send(_.assign({}, body, { order: 2 })) // 4 to 2 .expect(200) .end(() => { - // Milestone 6: order 1 => 1 - // Milestone 7: order 2 => 3 - // Milestone 8: order 4 => 2 models.Milestone.findByPk(6) .then((milestone) => { milestone.order.should.be.eql(1); }) .then(() => models.Milestone.findByPk(7)) .then((milestone) => { - milestone.order.should.be.eql(3); + milestone.order.should.be.eql(2); }) .then(() => models.Milestone.findByPk(8)) .then((milestone) => { @@ -880,198 +889,83 @@ describe('UPDATE Milestone', () => { }); }); - it('should return 200 for admin - marking milestone active later will cascade changes to coming ' + + xit('should return 200 for admin - marking milestone active later will adjust actual start date and end date' // eslint-disable-next-line func-names - 'milestones', function (done) { - this.timeout(10000); - const today = moment.utc().hours(0).minutes(0).seconds(0) - .milliseconds(0); + , function (done) { + this.timeout(10000); + const today = moment.utc().hours(0).minutes(0).seconds(0) + .milliseconds(0); - request(server) - .patch('/v5/timelines/1/milestones/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ status: MILESTONE_STATUS.ACTIVE }) - .expect(200) - .end(() => { - // Milestone 2: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-14T00:00:00.000Z' - // actualStartDate: null to today - // endDate: null to today + 2 (2 = duration - 1) - // Milestone 3: startDate: '2018-05-14T00:00:00.000Z' to today + 3 - // endDate: null to today + 5 (5 = 3 + duration - 1) - // Milestone 4: startDate: '2018-05-14T00:00:00.000Z' to today + 6 - // endDate: null to today + 8 (2 = 6 + duration - 1) - models.Milestone.findByPk(2) - .then((milestone) => { - should.exist(milestone.actualStartDate); - moment.utc(milestone.actualStartDate).diff(today, 'days').should.be.eql(0); - // start date of the updated milestone should not change - milestone.startDate.should.be.eql(new Date('2018-05-14T00:00:00.000Z')); - today.add('days', milestone.duration - 1); - // end date of the updated milestone should change, as delayed start caused scheduled to be delayed - moment.utc(milestone.endDate).diff(today, 'days').should.be.eql(0); - milestone.status.should.be.eql(MILESTONE_STATUS.ACTIVE); - return models.Milestone.findByPk(3); - }) - .then((milestone) => { - today.add('days', 1); // should have start date next to previous one's end date - moment.utc(milestone.startDate).diff(today, 'days').should.be.eql(0); - should.not.exist(milestone.actualStartDate); - today.add('days', milestone.duration - 1); - moment.utc(milestone.endDate).diff(today, 'days').should.be.eql(0); - return models.Milestone.findByPk(4); - }) - .then((milestone) => { - today.add('days', 1); // should have start date next to previous one's end date - moment.utc(milestone.startDate).diff(today, 'days').should.be.eql(0); - should.not.exist(milestone.actualStartDate); - today.add('days', milestone.duration - 1); - moment.utc(milestone.endDate).diff(today, 'days').should.be.eql(0); - done(); - }) - .catch(done); - }); - }); - - it('should return 200 for admin - changing completionDate will cascade changes to coming ' + - // eslint-disable-next-line func-names - 'milestones', function (done) { - this.timeout(10000); - const today = moment.utc().hours(0).minutes(0).seconds(0) - .milliseconds(0); - - request(server) - .patch('/v5/timelines/1/milestones/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(_.assign({}, body, { - completionDate: '2018-05-18T00:00:00.000Z', order: undefined, duration: undefined, - })) - .expect(200) - .end(() => { - // Milestone 3: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-19T00:00:00.000Z' - // endDate: null to '2018-05-21T00:00:00.000Z' - // Milestone 4: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-22T00:00:00.000Z' - // endDate: null to '2018-05-24T00:00:00.000Z' - models.Milestone.findByPk(3) - .then((milestone) => { - milestone.startDate.should.be.eql(new Date('2018-05-19T00:00:00.000Z')); - should.exist(milestone.actualStartDate); - moment().utc(milestone.actualStartDate).diff(today, 'days').should.be.eql(0); - // milestone.actualStartDate.should.be.eql(today); - milestone.endDate.should.be.eql(new Date('2018-05-21T00:00:00.000Z')); - milestone.status.should.be.eql(MILESTONE_STATUS.ACTIVE); - return models.Milestone.findByPk(4); - }) - .then((milestone) => { - milestone.startDate.should.be.eql(new Date('2018-05-22T00:00:00.000Z')); - should.not.exist(milestone.actualStartDate); - milestone.endDate.should.be.eql(new Date('2018-05-24T00:00:00.000Z')); - done(); - }) - .catch(done); - }); - }); - - it('should return 200 for admin - changing completionDate will change the timeline\'s ' + - // eslint-disable-next-line func-names - 'endDate', function (done) { - this.timeout(10000); - - request(server) - .patch('/v5/timelines/1/milestones/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(_.assign({}, body, { - completionDate: '2018-05-18T00:00:00.000Z', order: undefined, duration: undefined, - })) - .expect(200) - .end(() => { - // Milestone 3: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-19T00:00:00.000Z' - // endDate: null to '2018-05-21T00:00:00.000Z' - // Milestone 4: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-22T00:00:00.000Z' - // BELOW will be the new timeline's endDate - // endDate: null to '2018-05-24T00:00:00.000Z' - models.Timeline.findByPk(1) - .then((timeline) => { - // timeline start shouldn't change - timeline.startDate.should.be.eql(new Date('2018-05-02T00:00:00.000Z')); - - // timeline end should change - timeline.endDate.should.be.eql(new Date('2018-05-24T00:00:00.000Z')); - - done(); - }) - .catch(done); - }); - }); + request(server) + .patch('/v5/timelines/1/milestones/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ status: MILESTONE_STATUS.ACTIVE }) + .expect(200) + .end(() => { + models.Milestone.findByPk(2) + .then((milestone) => { + should.exist(milestone.actualStartDate); + moment.utc(milestone.actualStartDate).diff(today, 'days').should.be.eql(0); + // start date of the updated milestone should not change + milestone.startDate.should.be.eql(new Date('2018-05-14T00:00:00.000Z')); + today.add('days', milestone.duration - 1); + // end date of the updated milestone should change, as delayed start caused scheduled to be delayed + moment.utc(milestone.endDate).diff(today, 'days').should.be.eql(0); + milestone.status.should.be.eql(MILESTONE_STATUS.ACTIVE); + done(); + }) + .catch(done); + }); + }); - it('should return 200 for admin - changing duration will cascade changes to coming ' + + xit('should return 200 for admin - changing completionDate will set status to completed', // eslint-disable-next-line func-names - 'milestones', function (done) { - this.timeout(10000); - - request(server) - .patch('/v5/timelines/1/milestones/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(_.assign({}, body, { duration: 5, order: undefined, completionDate: undefined })) - .expect(200) - .end(() => { - // Milestone 3: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-19T00:00:00.000Z' - // endDate: null to '2018-05-21T00:00:00.000Z' - // Milestone 4: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-22T00:00:00.000Z' - // endDate: null to '2018-05-24T00:00:00.000Z' - models.Milestone.findByPk(3) - .then((milestone) => { - milestone.startDate.should.be.eql(new Date('2018-05-19T00:00:00.000Z')); - milestone.endDate.should.be.eql(new Date('2018-05-21T00:00:00.000Z')); - return models.Milestone.findByPk(4); - }) - .then((milestone) => { - milestone.startDate.should.be.eql(new Date('2018-05-22T00:00:00.000Z')); - milestone.endDate.should.be.eql(new Date('2018-05-24T00:00:00.000Z')); - done(); - }) - .catch(done); - }); - }); + function (done) { + this.timeout(10000); + const data = Object.assign({}, body, { completionDate: '2018-05-18T00:00:00.000Z', + order: undefined, + duration: undefined }); + delete data.status; + request(server) + .patch('/v5/timelines/1/milestones/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(data) + .expect(200) + .end(() => { + models.Milestone.findByPk(2) + .then((milestone) => { + milestone.status.should.be.eql(MILESTONE_STATUS.COMPLETED); + done(); + }) + .catch(done); + }); + }); - it('should return 200 for admin - changing duration will change the timeline\'s ' + + xit('should return 200 for admin - changing duration will adjust the milestone endDate', // eslint-disable-next-line func-names - 'endDate', function (done) { - this.timeout(10000); - - request(server) - .patch('/v5/timelines/1/milestones/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(_.assign({}, body, { duration: 5, order: undefined, completionDate: undefined })) - .expect(200) - .end(() => { - // Milestone 3: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-19T00:00:00.000Z' - // endDate: null to '2018-05-21T00:00:00.000Z' - // Milestone 4: startDate: '2018-05-14T00:00:00.000Z' to '2018-05-22T00:00:00.000Z' - // BELOW will be the new timeline's endDate - // endDate: null to '2018-05-24T00:00:00.000Z' - models.Timeline.findByPk(1) - .then((timeline) => { - // timeline start shouldn't change - timeline.startDate.should.be.eql(new Date('2018-05-02T00:00:00.000Z')); - - // timeline end should change - timeline.endDate.should.be.eql(new Date('2018-05-24T00:00:00.000Z')); - - done(); - }) - .catch(done); - }); - }); + function (done) { + this.timeout(10000); + request(server) + .patch('/v5/timelines/1/milestones/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(_.assign({}, body, { duration: 5, order: undefined, completionDate: undefined })) + .expect(200) + .end(() => { + models.Milestone.findByPk(2) + .then((milestone) => { + milestone.startDate.should.be.eql(new Date('2018-05-14T00:00:00.000Z')); + milestone.endDate.should.be.eql(new Date('2018-05-18T00:00:00.000Z')); + done(); + }) + .catch(done); + }); + }); it('should return 200 for connect admin', (done) => { request(server) @@ -1145,12 +1039,12 @@ describe('UPDATE Milestone', () => { const newBody = _.cloneDeep(body); newBody.status = 'paused'; request(server) - .patch('/v5/timelines/1/milestones/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(newBody) - .expect(400, done); + .patch('/v5/timelines/1/milestones/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(newBody) + .expect(400, done); }); it('should return 400 if try to pause not active milestone', (done) => { @@ -1158,12 +1052,12 @@ describe('UPDATE Milestone', () => { newBody.status = 'paused'; newBody.statusComment = 'milestone paused'; request(server) - .patch('/v5/timelines/1/milestones/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(newBody) - .expect(400, done); + .patch('/v5/timelines/1/milestones/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(newBody) + .expect(400, done); }); it('should return 200 if try to pause and should have one status history created', (done) => { @@ -1171,45 +1065,45 @@ describe('UPDATE Milestone', () => { newBody.status = 'paused'; newBody.statusComment = 'milestone paused'; request(server) - .patch('/v5/timelines/1/milestones/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(newBody) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - models.Milestone.findByPk(1).then((milestone) => { - milestone.status.should.be.eql('paused'); - return models.StatusHistory.findAll({ - where: { - reference: 'milestone', - referenceId: milestone.id, - status: milestone.status, - comment: 'milestone paused', - }, - paranoid: false, - }).then((statusHistories) => { - statusHistories.length.should.be.eql(1); - done(); + .patch('/v5/timelines/1/milestones/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(newBody) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + models.Milestone.findByPk(1).then((milestone) => { + milestone.status.should.be.eql('paused'); + return models.StatusHistory.findAll({ + where: { + reference: 'milestone', + referenceId: milestone.id, + status: milestone.status, + comment: 'milestone paused', + }, + paranoid: false, + }).then((statusHistories) => { + statusHistories.length.should.be.eql(1); + done(); + }); }); - }); - } - }); + } + }); }); it('should return 400 if try to resume not paused milestone', (done) => { const newBody = _.cloneDeep(body); newBody.status = 'resume'; request(server) - .patch('/v5/timelines/1/milestones/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(newBody) - .expect(400, done); + .patch('/v5/timelines/1/milestones/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(newBody) + .expect(400, done); }); it('should return 200 if try to resume then status should update to last status and ' + @@ -1250,34 +1144,34 @@ describe('UPDATE Milestone', () => { .then(milestone => milestone.update(_.assign({}, milestone.toJSON(), { status: 'paused' }))), ).then(() => { request(server) - .patch('/v5/timelines/1/milestones/7') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(newBody) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - models.Milestone.findByPk(7).then((milestone) => { - milestone.status.should.be.eql('active'); + .patch('/v5/timelines/1/milestones/7') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(newBody) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + models.Milestone.findByPk(7).then((milestone) => { + milestone.status.should.be.eql('active'); - return models.StatusHistory.findAll({ - where: { - reference: 'milestone', - referenceId: milestone.id, - status: 'active', - comment: 'new comment', - }, - paranoid: false, - }).then((statusHistories) => { - statusHistories.length.should.be.eql(1); - done(); + return models.StatusHistory.findAll({ + where: { + reference: 'milestone', + referenceId: milestone.id, + status: 'active', + comment: 'new comment', + }, + paranoid: false, + }).then((statusHistories) => { + statusHistories.length.should.be.eql(1); + done(); + }).catch(done); }).catch(done); - }).catch(done); - } - }); + } + }); }); }); @@ -1341,7 +1235,7 @@ describe('UPDATE Milestone', () => { }); }); - xit('should send message BUS_API_EVENT.MILESTONE_UPDATED when milestone duration updated', (done) => { + it('should send message BUS_API_EVENT.MILESTONE_UPDATED when milestone duration updated', (done) => { request(server) .patch('/v5/timelines/1/milestones/1') .set({ @@ -1356,10 +1250,7 @@ describe('UPDATE Milestone', () => { done(err); } else { testUtil.wait(() => { - // 5 milestones in total, so it would trigger 5 events - // 4 MILESTONE_UPDATED events are for 4 non deleted milestones - // 1 TIMELINE_ADJUSTED event, because timeline's end date updated - createEventSpy.calledOnce.should.be.true; + createEventSpy.calledOnce.should.be.false; createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_UPDATED, sinon.match({ resource: RESOURCES.MILESTONE })).should.be.true; createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_UPDATED, @@ -1370,7 +1261,7 @@ describe('UPDATE Milestone', () => { }); }); - xit('should send message BUS_API_EVENT.MILESTONE_UPDATED when milestone status updated', (done) => { + it('should send message BUS_API_EVENT.MILESTONE_UPDATED when milestone status updated', (done) => { request(server) .patch('/v5/timelines/1/milestones/1') .set({ @@ -1385,7 +1276,7 @@ describe('UPDATE Milestone', () => { done(err); } else { testUtil.wait(() => { - createEventSpy.calledOnce.should.be.true; + createEventSpy.calledOnce.should.be.false; createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_UPDATED, sinon.match({ resource: RESOURCES.MILESTONE })).should.be.true; createEventSpy.calledWith(BUS_API_EVENT.MILESTONE_UPDATED, @@ -1417,16 +1308,6 @@ describe('UPDATE Milestone', () => { resource: RESOURCES.MILESTONE, order: 2, })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MILESTONE_UPDATED, sinon.match({ - projectId: 1, - projectName: 'test1', - projectUrl: 'https://local.topcoder-dev.com/projects/1', - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; - done(); }); } @@ -1455,15 +1336,6 @@ describe('UPDATE Milestone', () => { plannedText: 'new text', })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MILESTONE_UPDATED, sinon.match({ - projectId: 1, - projectName: 'test1', - projectUrl: 'https://local.topcoder-dev.com/projects/1', - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; - done(); }); } diff --git a/src/routes/orgConfig/delete.js b/src/routes/orgConfig/delete.js index 91c59bb4..5aeb2c85 100644 --- a/src/routes/orgConfig/delete.js +++ b/src/routes/orgConfig/delete.js @@ -21,7 +21,7 @@ module.exports = [ validate(schema), permissions('orgConfig.delete'), (req, res, next) => - models.sequelize.transaction(() => + models.sequelize.transaction(() => models.OrgConfig.findByPk(req.params.id) .then((entity) => { if (!entity) { @@ -33,12 +33,12 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(entity => entity.destroy())) - .then((entity) => { - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.ORG_CONFIG, - _.pick(entity.toJSON(), 'id')); - res.status(204).end(); - }) - .catch(next), + .then((entity) => { + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.ORG_CONFIG, + _.pick(entity.toJSON(), 'id')); + res.status(204).end(); + }) + .catch(next), ]; diff --git a/src/routes/orgConfig/delete.spec.js b/src/routes/orgConfig/delete.spec.js index e4a234b5..e88db5db 100644 --- a/src/routes/orgConfig/delete.spec.js +++ b/src/routes/orgConfig/delete.spec.js @@ -10,27 +10,27 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (id, err, next) => { if (err) throw err; setTimeout(() => - models.OrgConfig.findOne({ - where: { - id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.OrgConfig.findOne({ + where: { + id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/metadata/orgConfig/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/metadata/orgConfig/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; describe('DELETE organization config', () => { diff --git a/src/routes/orgConfig/get.js b/src/routes/orgConfig/get.js index 5bd8d582..960c2a72 100644 --- a/src/routes/orgConfig/get.js +++ b/src/routes/orgConfig/get.js @@ -30,33 +30,33 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No orgConfig found in ES'); - models.OrgConfig.findOne({ - where: { - id: req.params.id, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((orgConfig) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No orgConfig found in ES'); + models.OrgConfig.findOne({ + where: { + id: req.params.id, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((orgConfig) => { // Not found - if (!orgConfig) { - const apiErr = new Error(`Organization config not found for id ${req.params.id}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!orgConfig) { + const apiErr = new Error(`Organization config not found for id ${req.params.id}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(orgConfig); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('orgConfigs found in ES'); - res.json(data[0].inner_hits.orgConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(orgConfig); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('orgConfigs found in ES'); + res.json(data[0].inner_hits.orgConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, diff --git a/src/routes/orgConfig/list.js b/src/routes/orgConfig/list.js index 6e5fb747..6df8d2bf 100644 --- a/src/routes/orgConfig/list.js +++ b/src/routes/orgConfig/list.js @@ -60,25 +60,25 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.orgConfigs.length === 0) { - req.log.debug('No orgConfig found in ES'); + .then((data) => { + if (data.orgConfigs.length === 0) { + req.log.debug('No orgConfig found in ES'); - // Get all organization config - const where = filters ? _.assign({}, filters, { orgId: { $in: orgIds } }) : {}; - models.OrgConfig.findAll({ - where, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then((orgConfigs) => { - res.json(orgConfigs); - }) - .catch(next); - } else { - req.log.debug('orgConfigs found in ES'); - res.json(data.orgConfigs.hits.hits.map(hit => hit._source)); // eslint-disable-line no-underscore-dangle - } - }); + // Get all organization config + const where = filters ? _.assign({}, filters, { orgId: { $in: orgIds } }) : {}; + models.OrgConfig.findAll({ + where, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }) + .then((orgConfigs) => { + res.json(orgConfigs); + }) + .catch(next); + } else { + req.log.debug('orgConfigs found in ES'); + res.json(data.orgConfigs.hits.hits.map(hit => hit._source)); // eslint-disable-line no-underscore-dangle + } + }); }, ]; diff --git a/src/routes/permissions/get.spec.js b/src/routes/permissions/get.spec.js index 57f7d62e..6edc6634 100644 --- a/src/routes/permissions/get.spec.js +++ b/src/routes/permissions/get.spec.js @@ -74,47 +74,47 @@ describe('GET permissions', () => { createdBy: 1, updatedBy: 2, }) - .then((t) => { - templateId = t.id; - // Create projects - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then((project) => { - projectId = project.id; - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, + .then((t) => { + templateId = t.id; + // Create projects + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId, + details: {}, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => { - const newPermissions = _.map(permissions, p => _.assign({}, p, { projectTemplateId: templateId })); - models.WorkManagementPermission.bulkCreate(newPermissions, { returning: true }) - .then(() => done()); - }); + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then((project) => { + projectId = project.id; + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + const newPermissions = _.map(permissions, p => _.assign({}, p, { projectTemplateId: templateId })); + models.WorkManagementPermission.bulkCreate(newPermissions, { returning: true }) + .then(() => done()); + }); + }); }); - }); }); }); diff --git a/src/routes/phaseProducts/create.js b/src/routes/phaseProducts/create.js index 4bfb9bc3..2273ec25 100644 --- a/src/routes/phaseProducts/create.js +++ b/src/routes/phaseProducts/create.js @@ -90,30 +90,30 @@ module.exports = [ throw err; } return models.PhaseProduct.create(data) - .then((_newPhaseProduct) => { - newPhaseProduct = _.cloneDeep(_newPhaseProduct); - req.log.debug('new phase product created (id# %d, name: %s)', - newPhaseProduct.id, newPhaseProduct.name); - newPhaseProduct = newPhaseProduct.get({ plain: true }); - newPhaseProduct = _.omit(newPhaseProduct, ['deletedAt', 'utm']); - }); + .then((_newPhaseProduct) => { + newPhaseProduct = _.cloneDeep(_newPhaseProduct); + req.log.debug('new phase product created (id# %d, name: %s)', + newPhaseProduct.id, newPhaseProduct.name); + newPhaseProduct = newPhaseProduct.get({ plain: true }); + newPhaseProduct = _.omit(newPhaseProduct, ['deletedAt', 'utm']); + }); })) - .then(() => { + .then(() => { // Send events to buses - req.log.debug('Sending event to RabbitMQ bus for phase product %d', newPhaseProduct.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, - newPhaseProduct, - { correlationId: req.id }, - ); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, - RESOURCES.PHASE_PRODUCT, - newPhaseProduct); + req.log.debug('Sending event to RabbitMQ bus for phase product %d', newPhaseProduct.id); + req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, + newPhaseProduct, + { correlationId: req.id }, + ); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, + RESOURCES.PHASE_PRODUCT, + newPhaseProduct); - res.status(201).json(newPhaseProduct); - }) - .catch((err) => { next(err); }); + res.status(201).json(newPhaseProduct); + }) + .catch((err) => { next(err); }); }, ]; diff --git a/src/routes/phaseProducts/create.spec.js b/src/routes/phaseProducts/create.spec.js index e987ed42..f5fda334 100644 --- a/src/routes/phaseProducts/create.spec.js +++ b/src/routes/phaseProducts/create.spec.js @@ -41,58 +41,58 @@ describe('Phase Products', () => { beforeEach((done) => { // mocks testUtil.clearDb() - .then(() => { - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + projectId = p.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - projectId = p.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => { - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - phaseId = phase.id; - done(); - }); + }).then((phase) => { + phaseId = phase.id; + done(); }); }); }); + }); }); afterEach((done) => { @@ -302,13 +302,13 @@ describe('Phase Products', () => { it('should send correct BUS API messages when product phase created', (done) => { request(server) - .post(`/v5/projects/${projectId}/phases/${phaseId}/products`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send(body) - .expect('Content-Type', /json/) - .expect(201) + .post(`/v5/projects/${projectId}/phases/${phaseId}/products`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send(body) + .expect('Content-Type', /json/) + .expect(201) .end((err) => { if (err) { done(err); diff --git a/src/routes/phaseProducts/delete.js b/src/routes/phaseProducts/delete.js index c30138bb..5894037b 100644 --- a/src/routes/phaseProducts/delete.js +++ b/src/routes/phaseProducts/delete.js @@ -36,7 +36,7 @@ module.exports = [ } return existing.update({ deletedBy: req.authUser.userId }); }) - .then(entity => entity.destroy())) + .then(entity => entity.destroy())) .then((deleted) => { req.log.debug('deleted phase product', JSON.stringify(deleted, null, 2)); diff --git a/src/routes/phaseProducts/delete.spec.js b/src/routes/phaseProducts/delete.spec.js index c6e7c358..54bb62f6 100644 --- a/src/routes/phaseProducts/delete.spec.js +++ b/src/routes/phaseProducts/delete.spec.js @@ -22,15 +22,15 @@ const expectAfterDelete = (projectId, phaseId, id, err, next) => { }, paranoid: false, }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); - } - next(); - }), 500); + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); + } + next(); + }), 500); }; const body = { name: 'test phase product', @@ -65,63 +65,63 @@ describe('Phase Products', () => { beforeEach((done) => { // mocks testUtil.clearDb() - .then(() => { - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + projectId = p.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - projectId = p.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => { - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - phaseId = phase.id; - _.assign(body, { phaseId, projectId }); + }).then((phase) => { + phaseId = phase.id; + _.assign(body, { phaseId, projectId }); - models.PhaseProduct.create(body).then((product) => { - productId = product.id; - done(); - }); + models.PhaseProduct.create(body).then((product) => { + productId = product.id; + done(); }); }); }); }); + }); }); afterEach((done) => { @@ -234,12 +234,12 @@ describe('Phase Products', () => { where: { userId: testUtil.userIds.copilot, projectId }, }).then(() => { request(server) - .delete(`/v5/projects/${projectId}/phases/${phaseId}/products/${productId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .expect(403) - .end(done); + .delete(`/v5/projects/${projectId}/phases/${phaseId}/products/${productId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .expect(403) + .end(done); }); }); diff --git a/src/routes/phaseProducts/get.js b/src/routes/phaseProducts/get.js index a2eca0c7..0afd3974 100644 --- a/src/routes/phaseProducts/get.js +++ b/src/routes/phaseProducts/get.js @@ -59,11 +59,11 @@ module.exports = [ }).catch(err => next(err)); } req.log.debug('phase product found in ES'); - // Get the phases - const phases = data[0].inner_hits.phases.hits.hits[0]._source; // eslint-disable-line no-underscore-dangle + // Get the phases + const phases = data[0].inner_hits.phases.hits.hits[0]._source; // eslint-disable-line no-underscore-dangle const product = _.isArray(phases.products) ? _.find(phases.products, p => p.id === productId) : {}; if (!product) { - // handle 404 + // handle 404 const err = new Error('phase product not found for project id ' + `${projectId}, phase id ${phaseId} and product id ${productId}`); err.status = 404; diff --git a/src/routes/phaseProducts/get.spec.js b/src/routes/phaseProducts/get.spec.js index a7d8deab..e1e46b81 100644 --- a/src/routes/phaseProducts/get.spec.js +++ b/src/routes/phaseProducts/get.spec.js @@ -42,63 +42,63 @@ describe('Phase Products', () => { // mocks testUtil.clearDb() .then(() => testUtil.clearES()) - .then(() => { - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + projectId = p.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - projectId = p.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => { - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - phaseId = phase.id; - _.assign(body, { phaseId, projectId }); + }).then((phase) => { + phaseId = phase.id; + _.assign(body, { phaseId, projectId }); - models.PhaseProduct.create(body).then((product) => { - productId = product.id; - done(); - }); + models.PhaseProduct.create(body).then((product) => { + productId = product.id; + done(); }); }); }); }); + }); }); after((done) => { diff --git a/src/routes/phaseProducts/list.js b/src/routes/phaseProducts/list.js index 842a0891..01afcb68 100644 --- a/src/routes/phaseProducts/list.js +++ b/src/routes/phaseProducts/list.js @@ -9,7 +9,7 @@ const retrieveFromDB = async (req, res, next) => { const projectId = _.parseInt(req.params.projectId); const phaseId = _.parseInt(req.params.phaseId); - // check if the project and phase are exist + // check if the project and phase are exist return models.ProjectPhase.findOne({ where: { id: phaseId, projectId }, raw: true, @@ -27,9 +27,9 @@ const retrieveFromDB = async (req, res, next) => { }; return models.PhaseProduct.search(parameters, req.log) - .then(({ rows }) => res.json(rows)); + .then(({ rows }) => res.json(rows)); }) - .catch(err => next(err)); + .catch(err => next(err)); }; module.exports = [ @@ -68,8 +68,8 @@ module.exports = [ return retrieveFromDB(req, res, next); } req.log.debug('phase product found in ES'); - // Get the phases - const phases = data[0].inner_hits.phases.hits.hits[0]._source; // eslint-disable-line no-underscore-dangle + // Get the phases + const phases = data[0].inner_hits.phases.hits.hits[0]._source; // eslint-disable-line no-underscore-dangle const products = _.isArray(phases.products) ? phases.products : []; return res.json(products); }) diff --git a/src/routes/phaseProducts/update.js b/src/routes/phaseProducts/update.js index 7ae577da..0a648519 100644 --- a/src/routes/phaseProducts/update.js +++ b/src/routes/phaseProducts/update.js @@ -49,7 +49,7 @@ module.exports = [ }, }).then(existing => new Promise((accept, reject) => { if (!existing) { - // handle 404 + // handle 404 const err = new Error('No active phase product found for project id ' + `${projectId}, phase id ${phaseId} and product id ${productId}`); err.status = 404; @@ -61,28 +61,28 @@ module.exports = [ existing.save().then(accept).catch(reject); } }))) - .then((updated) => { - req.log.debug('updated phase product', JSON.stringify(updated, null, 2)); + .then((updated) => { + req.log.debug('updated phase product', JSON.stringify(updated, null, 2)); - const updatedValue = updated.get({ plain: true }); + const updatedValue = updated.get({ plain: true }); - // emit original and updated project phase information - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, - { original: previousValue, updated: updatedValue }, - { correlationId: req.id }, - ); + // emit original and updated project phase information + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, + { original: previousValue, updated: updatedValue }, + { correlationId: req.id }, + ); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, - RESOURCES.PHASE_PRODUCT, - updatedValue, - previousValue, - ROUTES.PHASE_PRODUCTS.UPDATE); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, + RESOURCES.PHASE_PRODUCT, + updatedValue, + previousValue, + ROUTES.PHASE_PRODUCTS.UPDATE); - res.json(updated); - }).catch(err => next(err)); + res.json(updated); + }).catch(err => next(err)); }, ]; diff --git a/src/routes/phaseProducts/update.spec.js b/src/routes/phaseProducts/update.spec.js index be892212..1c5c2a61 100644 --- a/src/routes/phaseProducts/update.spec.js +++ b/src/routes/phaseProducts/update.spec.js @@ -54,63 +54,63 @@ describe('Phase Products', () => { beforeEach((done) => { // mocks testUtil.clearDb() - .then(() => { - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => { + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + projectId = p.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - projectId = p.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => { - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - phaseId = phase.id; - _.assign(body, { phaseId, projectId }); - - models.PhaseProduct.create(body).then((product) => { - productId = product.id; - done(); - }); + }).then((phase) => { + phaseId = phase.id; + _.assign(body, { phaseId, projectId }); + + models.PhaseProduct.create(body).then((product) => { + productId = product.id; + done(); }); }); }); }); + }); }); after((done) => { diff --git a/src/routes/phases/create.js b/src/routes/phases/create.js index 080e1915..353a81b5 100644 --- a/src/routes/phases/create.js +++ b/src/routes/phases/create.js @@ -169,7 +169,7 @@ module.exports = [ // So far we don't use the order so it's ok. But in general, we should pass // the original phases. <- TODO _.assign(_.pick(phase.toJSON(), 'id', 'order', 'updatedBy', 'updatedAt'))), - true, // don't send event to Notification Service as the main event here is updating one phase + true, // don't send event to Notification Service as the main event here is updating one phase ); res.status(201).json(newProjectPhase); diff --git a/src/routes/phases/create.spec.js b/src/routes/phases/create.spec.js index 106cac7a..af2cdd61 100644 --- a/src/routes/phases/create.spec.js +++ b/src/routes/phases/create.spec.js @@ -438,42 +438,42 @@ describe('Project Phases', () => { it('should send correct BUS API messages when phase added', (done) => { request(server) - .post(`/v5/projects/${projectId}/phases/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send(body) - .expect('Content-Type', /json/) - .expect(201) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_CREATED, sinon.match({ - resource: RESOURCES.PHASE, - name: body.name, - status: body.status, - budget: body.budget, - progress: body.progress, - projectId, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; - - done(); - }); - } - }); + .post(`/v5/projects/${projectId}/phases/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send(body) + .expect('Content-Type', /json/) + .expect(201) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_CREATED, sinon.match({ + resource: RESOURCES.PHASE, + name: body.name, + status: body.status, + budget: body.budget, + progress: body.progress, + projectId, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051332, + initiatorUserId: 40051332, + })).should.be.true; + + done(); + }); + } + }); }); }); @@ -532,30 +532,30 @@ describe('Project Phases', () => { }); sandbox.stub(messageService, 'getClient', () => mockHttpClient); request(server) - .post(`/v5/projects/${projectId}/phases/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send(body) - .expect('Content-Type', /json/) - .expect(201) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - publishSpy.calledOnce.should.be.true; - publishSpy.calledWith('project.phase.added').should.be.true; - createMessageSpy.calledOnce.should.be.true; - createMessageSpy.calledWith(sinon.match({ reference: 'project', - referenceId: '1', - tag: 'phase#1', - title: 'test project phase', - })).should.be.true; - done(); - }); - } - }); + .post(`/v5/projects/${projectId}/phases/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send(body) + .expect('Content-Type', /json/) + .expect(201) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + publishSpy.calledOnce.should.be.true; + publishSpy.calledWith('project.phase.added').should.be.true; + createMessageSpy.calledOnce.should.be.true; + createMessageSpy.calledWith(sinon.match({ reference: 'project', + referenceId: '1', + tag: 'phase#1', + title: 'test project phase', + })).should.be.true; + done(); + }); + } + }); }); }); }); diff --git a/src/routes/phases/delete.js b/src/routes/phases/delete.js index 5d1657bf..ab934ef4 100644 --- a/src/routes/phases/delete.js +++ b/src/routes/phases/delete.js @@ -34,7 +34,7 @@ module.exports = [ } return existing.update({ deletedBy: req.authUser.userId }); }) - .then(entity => entity.destroy())) + .then(entity => entity.destroy())) .then((deleted) => { req.log.debug('deleted project phase', JSON.stringify(deleted, null, 2)); diff --git a/src/routes/phases/delete.spec.js b/src/routes/phases/delete.spec.js index e619ed79..a07842c8 100644 --- a/src/routes/phases/delete.spec.js +++ b/src/routes/phases/delete.spec.js @@ -25,22 +25,22 @@ const ES_PROJECT_TYPE = config.get('elasticsearchConfig.docType'); const expectAfterDelete = (projectId, id, err, next) => { if (err) throw err; setTimeout(() => - models.ProjectPhase.findOne({ - where: { - id, - projectId, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); - } - next(); - }), 500); + models.ProjectPhase.findOne({ + where: { + id, + projectId, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); + } + next(); + }), 500); }; const body = { name: 'test project phase', @@ -98,36 +98,36 @@ describe('Project Phases', () => { beforeEach((done) => { // mocks testUtil.clearDb() - .then(() => { - models.Project.create(project).then((p) => { - projectId = p.id; - projectName = p.name; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => { - _.assign(body, { projectId }); - models.ProjectPhase.create(body).then((phase) => { - phaseId = phase.id; - done(); - }); + .then(() => { + models.Project.create(project).then((p) => { + projectId = p.id; + projectName = p.name; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + _.assign(body, { projectId }); + models.ProjectPhase.create(body).then((phase) => { + phaseId = phase.id; + done(); }); }); }); + }); }); afterEach((done) => { @@ -258,36 +258,36 @@ describe('Project Phases', () => { it('should send correct BUS API messages when phase removed', (done) => { request(server) - .delete(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .expect(204) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); + .delete(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_DELETED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_DELETED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051332, + initiatorUserId: 40051332, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); }); @@ -346,25 +346,25 @@ describe('Project Phases', () => { }); sandbox.stub(messageService, 'getClient', () => mockHttpClient); request(server) - .delete(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(204) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - publishSpy.calledOnce.should.be.true; - publishSpy.firstCall.calledWith('project.phase.removed').should.be.true; - deleteTopicSpy.calledOnce.should.be.true; - deleteTopicSpy.calledWith(topic.id).should.be.true; - deletePostsSpy.calledWith(topic.id).should.be.true; - done(); - }); - } - }); + .delete(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + publishSpy.calledOnce.should.be.true; + publishSpy.firstCall.calledWith('project.phase.removed').should.be.true; + deleteTopicSpy.calledOnce.should.be.true; + deleteTopicSpy.calledWith(topic.id).should.be.true; + deletePostsSpy.calledWith(topic.id).should.be.true; + done(); + }); + } + }); }); }); }); diff --git a/src/routes/phases/get.js b/src/routes/phases/get.js index 7ecb77a0..12c1bd3e 100644 --- a/src/routes/phases/get.js +++ b/src/routes/phases/get.js @@ -33,29 +33,29 @@ module.exports = [ }, }, }) - .then((data) => { - if (data.length === 0) { - req.log.debug('No phase found in ES'); - return models.ProjectPhase - .findOne({ - where: { id: phaseId, projectId }, - raw: true, - }) - .then((phase) => { - if (!phase) { + .then((data) => { + if (data.length === 0) { + req.log.debug('No phase found in ES'); + return models.ProjectPhase + .findOne({ + where: { id: phaseId, projectId }, + raw: true, + }) + .then((phase) => { + if (!phase) { // handle 404 - const err = new Error('project phase not found for project id ' + + const err = new Error('project phase not found for project id ' + `${projectId} and phase id ${phaseId}`); - err.status = 404; - throw err; - } - res.json(phase); - }) - .catch(err => next(err)); - } - req.log.debug('phase found in ES'); - return res.json(data[0].inner_hits.phases.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - }) - .catch(next); + err.status = 404; + throw err; + } + res.json(phase); + }) + .catch(err => next(err)); + } + req.log.debug('phase found in ES'); + return res.json(data[0].inner_hits.phases.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + }) + .catch(next); }, ]; diff --git a/src/routes/phases/get.spec.js b/src/routes/phases/get.spec.js index e448f96b..b5d2b1bb 100644 --- a/src/routes/phases/get.spec.js +++ b/src/routes/phases/get.spec.js @@ -42,47 +42,47 @@ describe('Project Phases', () => { before((done) => { // mocks testUtil.clearDb() - .then(() => testUtil.clearES()) - .then(() => { - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => testUtil.clearES()) + .then(() => { + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + projectId = p.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - projectId = p.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => { - _.assign(body, { projectId }); - models.ProjectPhase.create(body).then((phase) => { - phaseId = phase.id; - done(); - }); + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + _.assign(body, { projectId }); + models.ProjectPhase.create(body).then((phase) => { + phaseId = phase.id; + done(); }); }); }); + }); }); after((done) => { diff --git a/src/routes/phases/update.spec.js b/src/routes/phases/update.spec.js index b8b6910b..b924f396 100644 --- a/src/routes/phases/update.spec.js +++ b/src/routes/phases/update.spec.js @@ -379,338 +379,338 @@ describe('Project Phases', () => { it('should send correct BUS API messages when spentBudget updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - spentBudget: 123, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PAYMENT).should.be.true; + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + spentBudget: 123, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PAYMENT).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when progress updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - progress: 50, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PROGRESS).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PROGRESS_MODIFIED).should.be.true; - done(); - }); - } - }); + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + progress: 50, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(3); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_PROGRESS).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PROGRESS_MODIFIED).should.be.true; + done(); + }); + } + }); }); it('should send correct BUS API messages when details updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - details: { - text: 'something', - }, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_SCOPE).should.be.true; + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + details: { + text: 'something', + }, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_UPDATE_SCOPE).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when status updated (completed)', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - status: 'completed', - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_COMPLETED).should.be.true; + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + status: 'completed', + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_COMPLETED).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when status updated (active)', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId3}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - status: 'active', - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId3, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_ACTIVE).should.be.true; + .patch(`/v5/projects/${projectId}/phases/${phaseId3}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + status: 'active', + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId3, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PHASE_TRANSITION_ACTIVE).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when budget updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - budget: 123, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + budget: 123, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when startDate updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - startDate: 123, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; - - done(); - }); - } - }); + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + startDate: 123, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051332, + initiatorUserId: 40051332, + })).should.be.true; + + done(); + }); + } + }); }); it('should send correct BUS API messages when duration updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - duration: 100, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - duration: 100, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051332, - initiatorUserId: 40051332, - })).should.be.true; - - done(); - }); - } - }); + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + duration: 100, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + duration: 100, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051332, + initiatorUserId: 40051332, + })).should.be.true; + + done(); + }); + } + }); }); it('should send correct BUS API messages when order updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - order: 100, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + order: 100, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; - // NOTE: no other event should be called, as this phase doesn't move any other phases + // NOTE: no other event should be called, as this phase doesn't move any other phases - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when endDate updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .send({ - endDate: new Date(), - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: phaseId, - updatedBy: testUtil.userIds.copilot, - })).should.be.true; + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .send({ + endDate: new Date(), + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: phaseId, + updatedBy: testUtil.userIds.copilot, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); }); @@ -770,29 +770,29 @@ describe('Project Phases', () => { }); sandbox.stub(messageService, 'getClient', () => mockHttpClient); request(server) - .patch(`/v5/projects/${projectId}/phases/${phaseId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send(_.assign(updateBody, { budget: 123 })) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - publishSpy.calledOnce.should.be.true; - publishSpy.calledWith('project.phase.updated').should.be.true; - updateMessageSpy.calledOnce.should.be.true; - updateMessageSpy.calledWith(topic.id, sinon.match({ - title: updateBody.name, - postId: topic.posts[0].id, - content: topic.posts[0].body })).should.be.true; - done(); - }); - } - }); + .patch(`/v5/projects/${projectId}/phases/${phaseId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send(_.assign(updateBody, { budget: 123 })) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + publishSpy.calledOnce.should.be.true; + publishSpy.calledWith('project.phase.updated').should.be.true; + updateMessageSpy.calledOnce.should.be.true; + updateMessageSpy.calledWith(topic.id, sinon.match({ + title: updateBody.name, + postId: topic.posts[0].id, + content: topic.posts[0].body })).should.be.true; + done(); + }); + } + }); }); }); }); diff --git a/src/routes/planConfig/revision/create.js b/src/routes/planConfig/revision/create.js index 52c0cb0f..fa815a1a 100644 --- a/src/routes/planConfig/revision/create.js +++ b/src/routes/planConfig/revision/create.js @@ -60,7 +60,7 @@ module.exports = [ EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, RESOURCES.PLAN_CONFIG_REVISION, createdEntity.toJSON()); - // Omit deletedAt, deletedBy + // Omit deletedAt, deletedBy res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); }) .catch(next)); diff --git a/src/routes/planConfig/revision/create.spec.js b/src/routes/planConfig/revision/create.spec.js index f1a92f83..30aa1bf9 100644 --- a/src/routes/planConfig/revision/create.spec.js +++ b/src/routes/planConfig/revision/create.spec.js @@ -60,10 +60,10 @@ describe('CREATE PlanConfig Revision', () => { it('should return 404 if missing key', (done) => { request(server) - .post('/v5/projects/metadata/planConfig/no-exist-key/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/planConfig/no-exist-key/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(404, done); @@ -71,10 +71,10 @@ describe('CREATE PlanConfig Revision', () => { it('should return 404 if missing version', (done) => { request(server) - .post('/v5/projects/metadata/planConfig/dev/versions/100/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/planConfig/dev/versions/100/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(404, done); @@ -97,10 +97,10 @@ describe('CREATE PlanConfig Revision', () => { it('should return 201 for admin', (done) => { request(server) - .post('/v5/projects/metadata/planConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/planConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -123,7 +123,7 @@ describe('CREATE PlanConfig Revision', () => { it('should return 403 for member', (done) => { request(server) - .post('/v5/projects/metadata/planConfig/dev/versions/1/revisions') + .post('/v5/projects/metadata/planConfig/dev/versions/1/revisions') .set({ Authorization: `Bearer ${testUtil.jwts.member}`, }) diff --git a/src/routes/planConfig/revision/delete.js b/src/routes/planConfig/revision/delete.js index 8728e000..de3ea456 100644 --- a/src/routes/planConfig/revision/delete.js +++ b/src/routes/planConfig/revision/delete.js @@ -32,24 +32,24 @@ module.exports = [ revision: req.params.revision, }, }).then((planConfig) => { - if (!planConfig) { - const apiErr = new Error('PlanConfig not found for key' + + if (!planConfig) { + const apiErr = new Error('PlanConfig not found for key' + ` ${req.params.key} version ${req.params.version} revision ${req.params.revision}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - return planConfig.update({ - deletedBy: req.authUser.userId, - }); - }).then(planConfig => - planConfig.destroy(), - ).then((planConfig) => { - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PLAN_CONFIG_REVISION, - _.pick(planConfig.toJSON(), 'id')); - res.status(204).end(); - }) + apiErr.status = 404; + return Promise.reject(apiErr); + } + return planConfig.update({ + deletedBy: req.authUser.userId, + }); + }).then(planConfig => + planConfig.destroy(), + ).then((planConfig) => { + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PLAN_CONFIG_REVISION, + _.pick(planConfig.toJSON(), 'id')); + res.status(204).end(); + }) .catch(next)); }, ]; diff --git a/src/routes/planConfig/revision/delete.spec.js b/src/routes/planConfig/revision/delete.spec.js index 1d33284f..36222539 100644 --- a/src/routes/planConfig/revision/delete.spec.js +++ b/src/routes/planConfig/revision/delete.spec.js @@ -10,29 +10,29 @@ import testUtil from '../../../tests/util'; const expectAfterDelete = (err, next) => { if (err) throw err; setTimeout(() => - models.PlanConfig.findOne({ - where: { - key: 'dev', - version: 1, - revision: 1, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); - - request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + models.PlanConfig.findOne({ + where: { + key: 'dev', + version: 1, + revision: 1, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); + + request(server) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; @@ -79,34 +79,34 @@ describe('DELETE planConfig revision', () => { it('should return 403 for member', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(403, done); }); it('should return 403 for copilot', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(403, done); }); it('should return 403 for manager', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(403, done); }); it('should return 404 for non-existed key', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/no-existed-key/versions/1/revisions/1') + .delete('/v5/projects/metadata/planConfig/no-existed-key/versions/1/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -115,7 +115,7 @@ describe('DELETE planConfig revision', () => { it('should return 404 for non-existed version', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/100/revisions/1') + .delete('/v5/projects/metadata/planConfig/dev/versions/100/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -125,7 +125,7 @@ describe('DELETE planConfig revision', () => { it('should return 404 for non-existed revision', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/100') + .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/100') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -134,17 +134,17 @@ describe('DELETE planConfig revision', () => { it('should return 204, for admin', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .expect(204) .end(err => expectAfterDelete(err, done)); }); it('should return 204, for connect admin', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') + .delete('/v5/projects/metadata/planConfig/dev/versions/1/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, }) diff --git a/src/routes/planConfig/revision/get.js b/src/routes/planConfig/revision/get.js index a038380d..3bd5563f 100644 --- a/src/routes/planConfig/revision/get.js +++ b/src/routes/planConfig/revision/get.js @@ -43,35 +43,35 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No plan config found in ES'); - models.PlanConfig.findOne({ - where: { - key: req.params.key, - version: req.params.version, - revision: req.params.revision, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((planConfig) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No plan config found in ES'); + models.PlanConfig.findOne({ + where: { + key: req.params.key, + version: req.params.version, + revision: req.params.revision, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((planConfig) => { // Not found - if (!planConfig) { - const apiErr = new Error('PlanConfig not found for key' + + if (!planConfig) { + const apiErr = new Error('PlanConfig not found for key' + `${req.params.key} version ${req.params.version} revision ${req.params.revision}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(planConfig); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('plan config found in ES'); - res.json(data[0].inner_hits.planConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(planConfig); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('plan config found in ES'); + res.json(data[0].inner_hits.planConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/planConfig/revision/get.spec.js b/src/routes/planConfig/revision/get.spec.js index a524b5da..d69322b8 100644 --- a/src/routes/planConfig/revision/get.spec.js +++ b/src/routes/planConfig/revision/get.spec.js @@ -70,45 +70,45 @@ describe('GET a particular revision of specific version PlanConfig', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') - .expect(403, done); + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/planConfig/revision/list.js b/src/routes/planConfig/revision/list.js index dc18059e..ffb0652c 100644 --- a/src/routes/planConfig/revision/list.js +++ b/src/routes/planConfig/revision/list.js @@ -21,32 +21,34 @@ module.exports = [ permissions('planConfig.view'), (req, res, next) => - util.fetchFromES('planConfigs') - .then((data) => { - if (data.planConfigs.length === 0) { - req.log.debug('No planConfig found in ES'); - models.PlanConfig.findAll({ - where: { - key: req.params.key, - version: req.params.version, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((planConfigs) => { - // Not found - if ((!planConfigs) || (planConfigs.length === 0)) { - const apiErr = new Error(`PlanConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + util.fetchFromES('planConfigs') + .then((data) => { + if (data.planConfigs.length === 0) { + req.log.debug('No planConfig found in ES'); + models.PlanConfig.findAll({ + where: { + key: req.params.key, + version: req.params.version, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((planConfigs) => { + // Not found + if ((!planConfigs) || (planConfigs.length === 0)) { + const apiErr = new Error( + `PlanConfig not found for key ${req.params.key} version ${req.params.version}`, + ); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(planConfigs); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('planConfigs found in ES'); - res.json(data.planConfigs); - } - }).catch(next), + res.json(planConfigs); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('planConfigs found in ES'); + res.json(data.planConfigs); + } + }).catch(next), ]; diff --git a/src/routes/planConfig/revision/list.spec.js b/src/routes/planConfig/revision/list.spec.js index 38201af8..8035cd4f 100644 --- a/src/routes/planConfig/revision/list.spec.js +++ b/src/routes/planConfig/revision/list.spec.js @@ -72,45 +72,45 @@ describe('LIST planConfig revisions', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') - .expect(403, done); + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/planConfig/version/create.js b/src/routes/planConfig/version/create.js index dc0526b1..7edd979a 100644 --- a/src/routes/planConfig/version/create.js +++ b/src/routes/planConfig/version/create.js @@ -58,7 +58,7 @@ module.exports = [ EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, RESOURCES.PLAN_CONFIG_VERSION, createdEntity.toJSON()); - // Omit deletedAt, deletedBy + // Omit deletedAt, deletedBy res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); }) .catch(next)); diff --git a/src/routes/planConfig/version/create.spec.js b/src/routes/planConfig/version/create.spec.js index d3c19562..2d5d09f0 100644 --- a/src/routes/planConfig/version/create.spec.js +++ b/src/routes/planConfig/version/create.spec.js @@ -65,10 +65,10 @@ describe('CREATE PlanConfig version', () => { }); request(server) - .post('/v5/projects/metadata/planConfig/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/planConfig/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(invalidBody) .expect('Content-Type', /json/) .expect(400) @@ -77,10 +77,10 @@ describe('CREATE PlanConfig version', () => { it('should return 201 for admin', (done) => { request(server) - .post('/v5/projects/metadata/planConfig/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/planConfig/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -103,10 +103,10 @@ describe('CREATE PlanConfig version', () => { it('should return 403 for member', (done) => { request(server) - .post('/v5/projects/metadata/planConfig/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .post('/v5/projects/metadata/planConfig/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .send(body) .expect(403) .end(done); diff --git a/src/routes/planConfig/version/delete.js b/src/routes/planConfig/version/delete.js index 493fbdec..1f56a720 100644 --- a/src/routes/planConfig/version/delete.js +++ b/src/routes/planConfig/version/delete.js @@ -29,43 +29,43 @@ module.exports = [ version: req.params.version, }, }).then((allRevision) => { - if (allRevision.length === 0) { - const apiErr = new Error(`PlanConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - return models.PlanConfig.update( - { - deletedBy: req.authUser.userId, - }, { - where: { - key: req.params.key, - version: req.params.version, - }, - }); - }) - .then(() => models.PlanConfig.destroy({ - where: { - key: req.params.key, - version: req.params.version, - }, - })) - .then(deleted => models.PlanConfig.findAll({ - where: { - key: req.params.key, - version: req.params.version, - }, - paranoid: false, - order: [['deletedAt', 'DESC']], - limit: deleted, - })) - .then((planConfigs) => { - _.map(planConfigs, planConfig => util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PLAN_CONFIG_VERSION, - _.pick(planConfig.toJSON(), 'id'))); - res.status(204).end(); + if (allRevision.length === 0) { + const apiErr = new Error(`PlanConfig not found for key ${req.params.key} version ${req.params.version}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } + return models.PlanConfig.update( + { + deletedBy: req.authUser.userId, + }, { + where: { + key: req.params.key, + version: req.params.version, + }, + }); }) - .catch(next)); + .then(() => models.PlanConfig.destroy({ + where: { + key: req.params.key, + version: req.params.version, + }, + })) + .then(deleted => models.PlanConfig.findAll({ + where: { + key: req.params.key, + version: req.params.version, + }, + paranoid: false, + order: [['deletedAt', 'DESC']], + limit: deleted, + })) + .then((planConfigs) => { + _.map(planConfigs, planConfig => util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PLAN_CONFIG_VERSION, + _.pick(planConfig.toJSON(), 'id'))); + res.status(204).end(); + }) + .catch(next)); }, ]; diff --git a/src/routes/planConfig/version/delete.spec.js b/src/routes/planConfig/version/delete.spec.js index 79097e62..8b8521e7 100644 --- a/src/routes/planConfig/version/delete.spec.js +++ b/src/routes/planConfig/version/delete.spec.js @@ -10,25 +10,25 @@ import testUtil from '../../../tests/util'; const expectAfterDelete = (err, next) => { if (err) throw err; setTimeout(() => - models.PlanConfig.findAll({ - where: { - key: 'dev', - version: 1, - }, - paranoid: false, - }) - .then((planConfigs) => { - if (planConfigs.length === 0) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(planConfigs[0].deletedAt); - chai.assert.isNotNull(planConfigs[0].deletedBy); + models.PlanConfig.findAll({ + where: { + key: 'dev', + version: 1, + }, + paranoid: false, + }) + .then((planConfigs) => { + if (planConfigs.length === 0) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(planConfigs[0].deletedAt); + chai.assert.isNotNull(planConfigs[0].deletedBy); - chai.assert.isNotNull(planConfigs[1].deletedAt); - chai.assert.isNotNull(planConfigs[1].deletedBy); - next(); - } - }), 500); + chai.assert.isNotNull(planConfigs[1].deletedAt); + chai.assert.isNotNull(planConfigs[1].deletedBy); + next(); + } + }), 500); }; @@ -76,37 +76,37 @@ describe('DELETE planConfig version', () => { it('should return 403 for member', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(403) .end(done); }); it('should return 403 for copilot', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(403) .end(done); }); it('should return 403 for manager', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(403) .end(done); }); it('should return 404 for non-existed key', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev111/versions/1') + .delete('/v5/projects/metadata/planConfig/dev111/versions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -116,7 +116,7 @@ describe('DELETE planConfig version', () => { it('should return 404 for non-existed version', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/111') + .delete('/v5/projects/metadata/planConfig/dev/versions/111') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -126,17 +126,17 @@ describe('DELETE planConfig version', () => { it('should return 204, for admin', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .delete('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .expect(204) .end(err => expectAfterDelete(err, done)); }); it('should return 204, for connect admin', (done) => { request(server) - .delete('/v5/projects/metadata/planConfig/dev/versions/1') + .delete('/v5/projects/metadata/planConfig/dev/versions/1') .set({ Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, }) diff --git a/src/routes/planConfig/version/get.js b/src/routes/planConfig/version/get.js index 46fe1c7d..45274c0a 100644 --- a/src/routes/planConfig/version/get.js +++ b/src/routes/planConfig/version/get.js @@ -41,26 +41,28 @@ module.exports = [ }, sort: { 'planConfigs.version': 'desc' }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No planConfig found in ES'); - models.PlanConfig.latestRevisionOfLatestVersion(req.params.key) - .then((planConfig) => { - if (planConfig == null) { - const apiErr = new Error(`PlanConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - res.json(planConfig); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('planConfigs found in ES'); - res.json(data[0].inner_hits.planConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + .then((data) => { + if (data.length === 0) { + req.log.debug('No planConfig found in ES'); + models.PlanConfig.latestRevisionOfLatestVersion(req.params.key) + .then((planConfig) => { + if (planConfig == null) { + const apiErr = new Error( + `PlanConfig not found for key ${req.params.key} version ${req.params.version}`, + ); + apiErr.status = 404; + return Promise.reject(apiErr); + } + res.json(planConfig); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('planConfigs found in ES'); + res.json(data[0].inner_hits.planConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, diff --git a/src/routes/planConfig/version/get.spec.js b/src/routes/planConfig/version/get.spec.js index a7455791..6bc1f78d 100644 --- a/src/routes/planConfig/version/get.spec.js +++ b/src/routes/planConfig/version/get.spec.js @@ -91,47 +91,47 @@ describe('GET a latest version of specific key of PlanConfig', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev') - .expect(403) - .end(done); + .get('/v5/projects/metadata/planConfig/dev') + .expect(403) + .end(done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/planConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/planConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/planConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200) .end(done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/planConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200) .end(done); }); diff --git a/src/routes/planConfig/version/getVersion.js b/src/routes/planConfig/version/getVersion.js index 7673c3cf..64db138d 100644 --- a/src/routes/planConfig/version/getVersion.js +++ b/src/routes/planConfig/version/getVersion.js @@ -20,46 +20,48 @@ module.exports = [ validate(schema), permissions('planConfig.view'), (req, res, next) => - util.fetchByIdFromES('planConfigs', { - query: { - nested: { - path: 'planConfigs', - query: { - filtered: { - filter: { - bool: { - must: [ - { term: { 'planConfigs.key': req.params.key } }, - { term: { 'planConfigs.version': req.params.version } }, - ], + util.fetchByIdFromES('planConfigs', { + query: { + nested: { + path: 'planConfigs', + query: { + filtered: { + filter: { + bool: { + must: [ + { term: { 'planConfigs.key': req.params.key } }, + { term: { 'planConfigs.version': req.params.version } }, + ], + }, }, }, }, + inner_hits: {}, }, - inner_hits: {}, }, - }, - sort: { 'planConfigs.revision': 'desc' }, - }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No planConfig found in ES'); - return models.PlanConfig.findOneWithLatestRevision(req.params) - .then((planConfig) => { - // Not found - if (!planConfig) { - const apiErr = new Error(`PlanConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - res.json(planConfig); - return Promise.resolve(); - }) - .catch(next); - } - req.log.debug('planConfigs found in ES'); - res.json(data[0].inner_hits.planConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - return Promise.resolve(); - }) - .catch(next), + sort: { 'planConfigs.revision': 'desc' }, + }, 'metadata') + .then((data) => { + if (data.length === 0) { + req.log.debug('No planConfig found in ES'); + return models.PlanConfig.findOneWithLatestRevision(req.params) + .then((planConfig) => { + // Not found + if (!planConfig) { + const apiErr = new Error( + `PlanConfig not found for key ${req.params.key} version ${req.params.version}`, + ); + apiErr.status = 404; + return Promise.reject(apiErr); + } + res.json(planConfig); + return Promise.resolve(); + }) + .catch(next); + } + req.log.debug('planConfigs found in ES'); + res.json(data[0].inner_hits.planConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + return Promise.resolve(); + }) + .catch(next), ]; diff --git a/src/routes/planConfig/version/getVersion.spec.js b/src/routes/planConfig/version/getVersion.spec.js index 3052a224..f97a0c60 100644 --- a/src/routes/planConfig/version/getVersion.spec.js +++ b/src/routes/planConfig/version/getVersion.spec.js @@ -81,45 +81,45 @@ describe('GET a particular version of specific key of PlanConfig', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1') - .expect(403, done); + .get('/v5/projects/metadata/planConfig/dev/versions/1') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/planConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/planConfig/version/list.js b/src/routes/planConfig/version/list.js index 66c857d9..6358ffd5 100644 --- a/src/routes/planConfig/version/list.js +++ b/src/routes/planConfig/version/list.js @@ -19,41 +19,41 @@ module.exports = [ validate(schema), permissions('planConfig.view'), (req, res, next) => - util.fetchFromES('planConfigs') - .then((data) => { - if (data.planConfigs.length === 0) { - req.log.debug('No planConfig found in ES'); - models.PlanConfig.findAll({ - where: { - key: req.params.key, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((planConfigs) => { - // Not found - if ((!planConfigs) || (planConfigs.length === 0)) { - const apiErr = new Error(`PlanConfig not found for key ${req.params.key}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + util.fetchFromES('planConfigs') + .then((data) => { + if (data.planConfigs.length === 0) { + req.log.debug('No planConfig found in ES'); + models.PlanConfig.findAll({ + where: { + key: req.params.key, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((planConfigs) => { + // Not found + if ((!planConfigs) || (planConfigs.length === 0)) { + const apiErr = new Error(`PlanConfig not found for key ${req.params.key}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - const latestPlanConfigs = {}; - planConfigs.forEach((element) => { - const isNewerRevision = (latestPlanConfigs[element.version] != null) && + const latestPlanConfigs = {}; + planConfigs.forEach((element) => { + const isNewerRevision = (latestPlanConfigs[element.version] != null) && (latestPlanConfigs[element.version].revision < element.revision); - if ((latestPlanConfigs[element.version] == null) || isNewerRevision) { - latestPlanConfigs[element.version] = element; - } - }); - res.json(Object.values(latestPlanConfigs)); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('planConfigs found in ES'); - res.json(data.planConfigs); - } - }).catch(next), + if ((latestPlanConfigs[element.version] == null) || isNewerRevision) { + latestPlanConfigs[element.version] = element; + } + }); + res.json(Object.values(latestPlanConfigs)); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('planConfigs found in ES'); + res.json(data.planConfigs); + } + }).catch(next), ]; diff --git a/src/routes/planConfig/version/list.spec.js b/src/routes/planConfig/version/list.spec.js index 8fc3ce1b..3369feab 100644 --- a/src/routes/planConfig/version/list.spec.js +++ b/src/routes/planConfig/version/list.spec.js @@ -72,45 +72,45 @@ describe('LIST planConfig versions', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions') - .expect(403, done); + .get('/v5/projects/metadata/planConfig/dev/versions') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/planConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/planConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/planConfig/version/update.js b/src/routes/planConfig/version/update.js index b62b63c9..125ce62a 100644 --- a/src/routes/planConfig/version/update.js +++ b/src/routes/planConfig/version/update.js @@ -51,26 +51,26 @@ module.exports = [ } return Promise.resolve(planConfigs[0]); }) - .then((planConfig) => { - const revision = planConfig.revision + 1; - const entity = { - version: req.params.version, - revision, - createdBy: req.authUser.userId, - updatedBy: req.authUser.userId, - key: req.params.key, - config: req.body.config, - }; - return models.PlanConfig.create(entity); - }) - .then((createdEntity) => { - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, - RESOURCES.PLAN_CONFIG_VERSION, - createdEntity.toJSON()); - // Omit deletedAt, deletedBy - res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); - }) - .catch(next)); + .then((planConfig) => { + const revision = planConfig.revision + 1; + const entity = { + version: req.params.version, + revision, + createdBy: req.authUser.userId, + updatedBy: req.authUser.userId, + key: req.params.key, + config: req.body.config, + }; + return models.PlanConfig.create(entity); + }) + .then((createdEntity) => { + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, + RESOURCES.PLAN_CONFIG_VERSION, + createdEntity.toJSON()); + // Omit deletedAt, deletedBy + res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); + }) + .catch(next)); }, ]; diff --git a/src/routes/planConfig/version/update.spec.js b/src/routes/planConfig/version/update.spec.js index 025b2b08..b8d61d18 100644 --- a/src/routes/planConfig/version/update.spec.js +++ b/src/routes/planConfig/version/update.spec.js @@ -64,10 +64,10 @@ describe('UPDATE PlanConfig version', () => { config: undefined, }); request(server) - .patch('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .patch('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(invalidBody) .expect('Content-Type', /json/) .expect(400) @@ -76,10 +76,10 @@ describe('UPDATE PlanConfig version', () => { it('should return 201 for admin', (done) => { request(server) - .patch('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .patch('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -102,10 +102,10 @@ describe('UPDATE PlanConfig version', () => { it('should return 403 for member', (done) => { request(server) - .patch('/v5/projects/metadata/planConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .patch('/v5/projects/metadata/planConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .send(body) .expect(403) .end(done); diff --git a/src/routes/priceConfig/revision/create.js b/src/routes/priceConfig/revision/create.js index 294f176f..8a072d05 100644 --- a/src/routes/priceConfig/revision/create.js +++ b/src/routes/priceConfig/revision/create.js @@ -60,7 +60,7 @@ module.exports = [ EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, RESOURCES.PRICE_CONFIG_REVISION, createdEntity.toJSON()); - // Omit deletedAt, deletedBy + // Omit deletedAt, deletedBy res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); }) .catch(next)); diff --git a/src/routes/priceConfig/revision/create.spec.js b/src/routes/priceConfig/revision/create.spec.js index 537f043f..d8fc5e94 100644 --- a/src/routes/priceConfig/revision/create.spec.js +++ b/src/routes/priceConfig/revision/create.spec.js @@ -61,10 +61,10 @@ describe('CREATE PriceConfig Revision', () => { it('should return 404 if missing key', (done) => { request(server) - .post('/v5/projects/metadata/priceConfig/no-exist-key/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/priceConfig/no-exist-key/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(404, done); @@ -72,10 +72,10 @@ describe('CREATE PriceConfig Revision', () => { it('should return 404 if missing version', (done) => { request(server) - .post('/v5/projects/metadata/priceConfig/dev/versions/100/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/priceConfig/dev/versions/100/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(404, done); @@ -98,10 +98,10 @@ describe('CREATE PriceConfig Revision', () => { it('should return 201 for admin', (done) => { request(server) - .post('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -124,7 +124,7 @@ describe('CREATE PriceConfig Revision', () => { it('should return 403 for member', (done) => { request(server) - .post('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') + .post('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') .set({ Authorization: `Bearer ${testUtil.jwts.member}`, }) diff --git a/src/routes/priceConfig/revision/delete.js b/src/routes/priceConfig/revision/delete.js index a529ba58..a8bc3369 100644 --- a/src/routes/priceConfig/revision/delete.js +++ b/src/routes/priceConfig/revision/delete.js @@ -32,24 +32,24 @@ module.exports = [ revision: req.params.revision, }, }).then((priceConfig) => { - if (!priceConfig) { - const apiErr = new Error('PriceConfig not found for key' + + if (!priceConfig) { + const apiErr = new Error('PriceConfig not found for key' + ` ${req.params.key} version ${req.params.version} revision ${req.params.revision}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - return priceConfig.update({ - deletedBy: req.authUser.userId, - }); - }).then(priceConfig => - priceConfig.destroy(), - ).then((priceConfig) => { - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PRICE_CONFIG_REVISION, - _.pick(priceConfig.toJSON(), 'id')); - res.status(204).end(); - }) + apiErr.status = 404; + return Promise.reject(apiErr); + } + return priceConfig.update({ + deletedBy: req.authUser.userId, + }); + }).then(priceConfig => + priceConfig.destroy(), + ).then((priceConfig) => { + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PRICE_CONFIG_REVISION, + _.pick(priceConfig.toJSON(), 'id')); + res.status(204).end(); + }) .catch(next)); }, ]; diff --git a/src/routes/priceConfig/revision/delete.spec.js b/src/routes/priceConfig/revision/delete.spec.js index 4ab18cda..11be7e4b 100644 --- a/src/routes/priceConfig/revision/delete.spec.js +++ b/src/routes/priceConfig/revision/delete.spec.js @@ -10,29 +10,29 @@ import testUtil from '../../../tests/util'; const expectAfterDelete = (err, next) => { if (err) throw err; setTimeout(() => - models.PriceConfig.findOne({ - where: { - key: 'dev', - version: 1, - revision: 1, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.PriceConfig.findOne({ + where: { + key: 'dev', + version: 1, + revision: 1, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; @@ -78,34 +78,34 @@ describe('DELETE priceConfig revision', () => { it('should return 403 for member', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(403, done); }); it('should return 403 for copilot', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(403, done); }); it('should return 403 for manager', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(403, done); }); it('should return 404 for non-existed key', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/no-existed-key/versions/1/revisions/1') + .delete('/v5/projects/metadata/priceConfig/no-existed-key/versions/1/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -114,7 +114,7 @@ describe('DELETE priceConfig revision', () => { it('should return 404 for non-existed version', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/100/revisions/1') + .delete('/v5/projects/metadata/priceConfig/dev/versions/100/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -124,7 +124,7 @@ describe('DELETE priceConfig revision', () => { it('should return 404 for non-existed revision', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/100') + .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/100') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -133,17 +133,17 @@ describe('DELETE priceConfig revision', () => { it('should return 204, for admin', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .expect(204) .end(err => expectAfterDelete(err, done)); }); it('should return 204, for connect admin', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') + .delete('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/1') .set({ Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, }) diff --git a/src/routes/priceConfig/revision/get.js b/src/routes/priceConfig/revision/get.js index acd2da9a..aa35afeb 100644 --- a/src/routes/priceConfig/revision/get.js +++ b/src/routes/priceConfig/revision/get.js @@ -43,35 +43,35 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No priceConfi found in ES'); - models.PriceConfig.findOne({ - where: { - key: req.params.key, - version: req.params.version, - revision: req.params.revision, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((priceConfig) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No priceConfi found in ES'); + models.PriceConfig.findOne({ + where: { + key: req.params.key, + version: req.params.version, + revision: req.params.revision, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((priceConfig) => { // Not found - if (!priceConfig) { - const apiErr = new Error('PriceConfig not found for key' + + if (!priceConfig) { + const apiErr = new Error('PriceConfig not found for key' + ` ${req.params.key} version ${req.params.version} revision ${req.params.revision}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(priceConfig); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('priceConfigs found in ES'); - res.json(data[0].inner_hits.priceConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(priceConfig); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('priceConfigs found in ES'); + res.json(data[0].inner_hits.priceConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/priceConfig/revision/get.spec.js b/src/routes/priceConfig/revision/get.spec.js index 65f6e72b..3d9423cc 100644 --- a/src/routes/priceConfig/revision/get.spec.js +++ b/src/routes/priceConfig/revision/get.spec.js @@ -70,45 +70,45 @@ describe('GET a particular revision of specific version PriceConfig', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') - .expect(403, done); + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions/2') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/priceConfig/revision/list.js b/src/routes/priceConfig/revision/list.js index bbfa404d..21561ef5 100644 --- a/src/routes/priceConfig/revision/list.js +++ b/src/routes/priceConfig/revision/list.js @@ -20,33 +20,35 @@ module.exports = [ validate(schema), permissions('priceConfig.view'), (req, res, next) => - util.fetchFromES('priceConfigs') - .then((data) => { - if (data.priceConfigs.length === 0) { - req.log.debug('No priceConfig found in ES'); - models.PriceConfig.findAll({ - where: { - key: req.params.key, - version: req.params.version, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((priceConfigs) => { - // Not found - if ((!priceConfigs) || (priceConfigs.length === 0)) { - const apiErr = new Error(`PriceConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + util.fetchFromES('priceConfigs') + .then((data) => { + if (data.priceConfigs.length === 0) { + req.log.debug('No priceConfig found in ES'); + models.PriceConfig.findAll({ + where: { + key: req.params.key, + version: req.params.version, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((priceConfigs) => { + // Not found + if ((!priceConfigs) || (priceConfigs.length === 0)) { + const apiErr = new Error( + `PriceConfig not found for key ${req.params.key} version ${req.params.version}`, + ); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(priceConfigs); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('priceConfigs found in ES'); - res.json(data.priceConfigs); - } - }).catch(next), + res.json(priceConfigs); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('priceConfigs found in ES'); + res.json(data.priceConfigs); + } + }).catch(next), ]; diff --git a/src/routes/priceConfig/revision/list.spec.js b/src/routes/priceConfig/revision/list.spec.js index 04623fda..76d3c390 100644 --- a/src/routes/priceConfig/revision/list.spec.js +++ b/src/routes/priceConfig/revision/list.spec.js @@ -72,45 +72,45 @@ describe('LIST priceConfig revisions', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') - .expect(403, done); + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1/revisions') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/priceConfig/version/create.js b/src/routes/priceConfig/version/create.js index 504e9f7c..ef299596 100644 --- a/src/routes/priceConfig/version/create.js +++ b/src/routes/priceConfig/version/create.js @@ -60,7 +60,7 @@ module.exports = [ EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, RESOURCES.PRICE_CONFIG_VERSION, createdEntity.toJSON()); - // Omit deletedAt, deletedBy + // Omit deletedAt, deletedBy res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); }) .catch(next)); diff --git a/src/routes/priceConfig/version/create.spec.js b/src/routes/priceConfig/version/create.spec.js index 23a659e4..645366a1 100644 --- a/src/routes/priceConfig/version/create.spec.js +++ b/src/routes/priceConfig/version/create.spec.js @@ -64,10 +64,10 @@ describe('CREATE PriceConfig version', () => { }); request(server) - .post('/v5/projects/metadata/priceConfig/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/priceConfig/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(invalidBody) .expect('Content-Type', /json/) .expect(400, done); @@ -75,10 +75,10 @@ describe('CREATE PriceConfig version', () => { it('should return 201 for admin', (done) => { request(server) - .post('/v5/projects/metadata/priceConfig/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/priceConfig/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -101,10 +101,10 @@ describe('CREATE PriceConfig version', () => { it('should return 403 for member', (done) => { request(server) - .post('/v5/projects/metadata/priceConfig/dev/versions/') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .post('/v5/projects/metadata/priceConfig/dev/versions/') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .send(body) .expect(403, done); }); diff --git a/src/routes/priceConfig/version/delete.js b/src/routes/priceConfig/version/delete.js index 3a9eaf28..db3f26f3 100644 --- a/src/routes/priceConfig/version/delete.js +++ b/src/routes/priceConfig/version/delete.js @@ -29,43 +29,43 @@ module.exports = [ version: req.params.version, }, }).then((allRevision) => { - if (allRevision.length === 0) { - const apiErr = new Error(`PriceConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - return models.PriceConfig.update( - { - deletedBy: req.authUser.userId, - }, { - where: { - key: req.params.key, - version: req.params.version, - }, - }); - }) - .then(() => models.PriceConfig.destroy({ - where: { - key: req.params.key, - version: req.params.version, - }, - })) - .then(deleted => models.PriceConfig.findAll({ - where: { - key: req.params.key, - version: req.params.version, - }, - paranoid: false, - order: [['deletedAt', 'DESC']], - limit: deleted, - })) - .then((priceConfigs) => { - _.map(priceConfigs, priceConfig => util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PRICE_CONFIG_VERSION, - _.pick(priceConfig.toJSON(), 'id'))); - res.status(204).end(); + if (allRevision.length === 0) { + const apiErr = new Error(`PriceConfig not found for key ${req.params.key} version ${req.params.version}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } + return models.PriceConfig.update( + { + deletedBy: req.authUser.userId, + }, { + where: { + key: req.params.key, + version: req.params.version, + }, + }); }) - .catch(next)); + .then(() => models.PriceConfig.destroy({ + where: { + key: req.params.key, + version: req.params.version, + }, + })) + .then(deleted => models.PriceConfig.findAll({ + where: { + key: req.params.key, + version: req.params.version, + }, + paranoid: false, + order: [['deletedAt', 'DESC']], + limit: deleted, + })) + .then((priceConfigs) => { + _.map(priceConfigs, priceConfig => util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PRICE_CONFIG_VERSION, + _.pick(priceConfig.toJSON(), 'id'))); + res.status(204).end(); + }) + .catch(next)); }, ]; diff --git a/src/routes/priceConfig/version/delete.spec.js b/src/routes/priceConfig/version/delete.spec.js index 534ffc82..916a2e99 100644 --- a/src/routes/priceConfig/version/delete.spec.js +++ b/src/routes/priceConfig/version/delete.spec.js @@ -10,25 +10,25 @@ import testUtil from '../../../tests/util'; const expectAfterDelete = (err, next) => { if (err) throw err; setTimeout(() => - models.PriceConfig.findAll({ - where: { - key: 'dev', - version: 1, - }, - paranoid: false, - }) - .then((priceConfigs) => { - if (priceConfigs.length === 0) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(priceConfigs[0].deletedAt); - chai.assert.isNotNull(priceConfigs[0].deletedBy); + models.PriceConfig.findAll({ + where: { + key: 'dev', + version: 1, + }, + paranoid: false, + }) + .then((priceConfigs) => { + if (priceConfigs.length === 0) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(priceConfigs[0].deletedAt); + chai.assert.isNotNull(priceConfigs[0].deletedBy); - chai.assert.isNotNull(priceConfigs[1].deletedAt); - chai.assert.isNotNull(priceConfigs[1].deletedBy); - next(); - } - }), 500); + chai.assert.isNotNull(priceConfigs[1].deletedAt); + chai.assert.isNotNull(priceConfigs[1].deletedBy); + next(); + } + }), 500); }; @@ -75,34 +75,34 @@ describe('DELETE priceConfig version', () => { it('should return 403 for member', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(403, done); }); it('should return 403 for copilot', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(403, done); }); it('should return 403 for manager', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(403, done); }); it('should return 404 for non-existed key', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev111/versions/1') + .delete('/v5/projects/metadata/priceConfig/dev111/versions/1') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -111,7 +111,7 @@ describe('DELETE priceConfig version', () => { it('should return 404 for non-existed version', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/111') + .delete('/v5/projects/metadata/priceConfig/dev/versions/111') .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -120,17 +120,17 @@ describe('DELETE priceConfig version', () => { it('should return 204, for admin', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .delete('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .expect(204) .end(err => expectAfterDelete(err, done)); }); it('should return 204, for connect admin', (done) => { request(server) - .delete('/v5/projects/metadata/priceConfig/dev/versions/1') + .delete('/v5/projects/metadata/priceConfig/dev/versions/1') .set({ Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, }) diff --git a/src/routes/priceConfig/version/get.js b/src/routes/priceConfig/version/get.js index d23b4bae..48444b48 100644 --- a/src/routes/priceConfig/version/get.js +++ b/src/routes/priceConfig/version/get.js @@ -41,26 +41,28 @@ module.exports = [ }, sort: { 'priceConfigs.version': 'desc' }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No priceConfig found in ES'); + .then((data) => { + if (data.length === 0) { + req.log.debug('No priceConfig found in ES'); - models.PriceConfig.latestRevisionOfLatestVersion(req.params.key) - .then((priceConfig) => { - if (priceConfig == null) { - const apiErr = new Error(`PriceConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - res.json(priceConfig); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('priceConfigs found in ES'); - res.json(data[0].inner_hits.priceConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + models.PriceConfig.latestRevisionOfLatestVersion(req.params.key) + .then((priceConfig) => { + if (priceConfig == null) { + const apiErr = new Error( + `PriceConfig not found for key ${req.params.key} version ${req.params.version}`, + ); + apiErr.status = 404; + return Promise.reject(apiErr); + } + res.json(priceConfig); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('priceConfigs found in ES'); + res.json(data[0].inner_hits.priceConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/priceConfig/version/get.spec.js b/src/routes/priceConfig/version/get.spec.js index e7062502..4f1c2f76 100644 --- a/src/routes/priceConfig/version/get.spec.js +++ b/src/routes/priceConfig/version/get.spec.js @@ -91,45 +91,45 @@ describe('GET a latest version of specific key of PriceConfig', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev') - .expect(403, done); + .get('/v5/projects/metadata/priceConfig/dev') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/priceConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/priceConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/priceConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/priceConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/priceConfig/version/getVersion.js b/src/routes/priceConfig/version/getVersion.js index c6b9120e..58bddb7d 100644 --- a/src/routes/priceConfig/version/getVersion.js +++ b/src/routes/priceConfig/version/getVersion.js @@ -41,26 +41,28 @@ module.exports = [ }, sort: { 'priceConfigs.revision': 'desc' }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No priceConfig found in ES'); - return models.PriceConfig.findOneWithLatestRevision(req.params) - .then((priceConfig) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No priceConfig found in ES'); + return models.PriceConfig.findOneWithLatestRevision(req.params) + .then((priceConfig) => { // Not found - if (!priceConfig) { - const apiErr = new Error(`PriceConfig not found for key ${req.params.key} version ${req.params.version}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - res.json(priceConfig); - return Promise.resolve(); - }) - .catch(next); - } - req.log.debug('priceConfigs found in ES'); - res.json(data[0].inner_hits.priceConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - return Promise.resolve(); - }) - .catch(next); + if (!priceConfig) { + const apiErr = new Error( + `PriceConfig not found for key ${req.params.key} version ${req.params.version}`, + ); + apiErr.status = 404; + return Promise.reject(apiErr); + } + res.json(priceConfig); + return Promise.resolve(); + }) + .catch(next); + } + req.log.debug('priceConfigs found in ES'); + res.json(data[0].inner_hits.priceConfigs.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + return Promise.resolve(); + }) + .catch(next); }, ]; diff --git a/src/routes/priceConfig/version/getVersion.spec.js b/src/routes/priceConfig/version/getVersion.spec.js index 7f693610..0ba1ee75 100644 --- a/src/routes/priceConfig/version/getVersion.spec.js +++ b/src/routes/priceConfig/version/getVersion.spec.js @@ -81,45 +81,45 @@ describe('GET a particular version of specific key of PriceConfig', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1') - .expect(403, done); + .get('/v5/projects/metadata/priceConfig/dev/versions/1') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/priceConfig/dev') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/priceConfig/version/list.js b/src/routes/priceConfig/version/list.js index a8257e94..c2a1f781 100644 --- a/src/routes/priceConfig/version/list.js +++ b/src/routes/priceConfig/version/list.js @@ -19,39 +19,39 @@ module.exports = [ validate(schema), permissions('priceConfig.view'), (req, res, next) => - util.fetchFromES('priceConfigs') - .then((data) => { - if (data.priceConfigs.length === 0) { - req.log.debug('No priceConfig found in ES'); - models.PriceConfig.findAll({ - where: { - key: req.params.key, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((priceConfigs) => { - // Not found - if ((!priceConfigs) || (priceConfigs.length === 0)) { - const apiErr = new Error(`PriceConfig not found for key ${req.params.key}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + util.fetchFromES('priceConfigs') + .then((data) => { + if (data.priceConfigs.length === 0) { + req.log.debug('No priceConfig found in ES'); + models.PriceConfig.findAll({ + where: { + key: req.params.key, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((priceConfigs) => { + // Not found + if ((!priceConfigs) || (priceConfigs.length === 0)) { + const apiErr = new Error(`PriceConfig not found for key ${req.params.key}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - const latestPriceConfigs = {}; - priceConfigs.forEach((element) => { - const isNewerRevision = (latestPriceConfigs[element.version] != null) && + const latestPriceConfigs = {}; + priceConfigs.forEach((element) => { + const isNewerRevision = (latestPriceConfigs[element.version] != null) && (latestPriceConfigs[element.version].revision < element.revision); - if ((latestPriceConfigs[element.version] == null) || isNewerRevision) { - latestPriceConfigs[element.version] = element; - } - }); - res.json(Object.values(latestPriceConfigs)); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('priceConfigs found in ES'); - res.json(data.priceConfigs); - } - }).catch(next), + if ((latestPriceConfigs[element.version] == null) || isNewerRevision) { + latestPriceConfigs[element.version] = element; + } + }); + res.json(Object.values(latestPriceConfigs)); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('priceConfigs found in ES'); + res.json(data.priceConfigs); + } + }).catch(next), ]; diff --git a/src/routes/priceConfig/version/list.spec.js b/src/routes/priceConfig/version/list.spec.js index ec245406..dc950a04 100644 --- a/src/routes/priceConfig/version/list.spec.js +++ b/src/routes/priceConfig/version/list.spec.js @@ -72,45 +72,45 @@ describe('LIST priceConfig versions', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions') - .expect(403, done); + .get('/v5/projects/metadata/priceConfig/dev/versions') + .expect(403, done); }); it('should return 200 for connect admin', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) .expect(200) .end(done); }); it('should return 200 for connect manager', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) .expect(200) .end(done); }); it('should return 200 for member', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .expect(200, done); }); it('should return 200 for copilot', (done) => { request(server) - .get('/v5/projects/metadata/priceConfig/dev/versions') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) + .get('/v5/projects/metadata/priceConfig/dev/versions') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) .expect(200, done); }); }); diff --git a/src/routes/priceConfig/version/update.js b/src/routes/priceConfig/version/update.js index 1a58138d..63203717 100644 --- a/src/routes/priceConfig/version/update.js +++ b/src/routes/priceConfig/version/update.js @@ -53,26 +53,26 @@ module.exports = [ } return Promise.resolve(priceConfigs[0]); }) - .then((priceConfig) => { - const revision = priceConfig.revision + 1; - const entity = { - version: req.params.version, - revision, - createdBy: req.authUser.userId, - updatedBy: req.authUser.userId, - key: req.params.key, - config: req.body.config, - }; - return models.PriceConfig.create(entity); - }) - .then((createdEntity) => { - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, - RESOURCES.PRICE_CONFIG_VERSION, - createdEntity.toJSON()); - // Omit deletedAt, deletedBy - res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); - }) - .catch(next)); + .then((priceConfig) => { + const revision = priceConfig.revision + 1; + const entity = { + version: req.params.version, + revision, + createdBy: req.authUser.userId, + updatedBy: req.authUser.userId, + key: req.params.key, + config: req.body.config, + }; + return models.PriceConfig.create(entity); + }) + .then((createdEntity) => { + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_CREATE, + RESOURCES.PRICE_CONFIG_VERSION, + createdEntity.toJSON()); + // Omit deletedAt, deletedBy + res.status(201).json(_.omit(createdEntity.toJSON(), 'deletedAt', 'deletedBy')); + }) + .catch(next)); }, ]; diff --git a/src/routes/priceConfig/version/update.spec.js b/src/routes/priceConfig/version/update.spec.js index ebb4d853..73a18bc4 100644 --- a/src/routes/priceConfig/version/update.spec.js +++ b/src/routes/priceConfig/version/update.spec.js @@ -63,10 +63,10 @@ describe('UPDATE PriceConfig version', () => { config: undefined, }); request(server) - .patch('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .patch('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(invalidBody) .expect('Content-Type', /json/) .expect(400, done); @@ -74,10 +74,10 @@ describe('UPDATE PriceConfig version', () => { it('should return 201 for admin', (done) => { request(server) - .patch('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .patch('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect('Content-Type', /json/) .expect(201) @@ -100,10 +100,10 @@ describe('UPDATE PriceConfig version', () => { it('should return 403 for member', (done) => { request(server) - .patch('/v5/projects/metadata/priceConfig/dev/versions/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) + .patch('/v5/projects/metadata/priceConfig/dev/versions/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) .send(body) .expect(403, done); }); diff --git a/src/routes/productCategories/delete.js b/src/routes/productCategories/delete.js index c5a9f084..9e364781 100644 --- a/src/routes/productCategories/delete.js +++ b/src/routes/productCategories/delete.js @@ -21,7 +21,7 @@ module.exports = [ validate(schema), permissions('productCategory.delete'), (req, res, next) => - models.sequelize.transaction(() => + models.sequelize.transaction(() => models.ProductCategory.findByPk(req.params.key) .then((entity) => { if (!entity) { @@ -33,12 +33,12 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(entity => entity.destroy())) - .then((entity) => { - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PRODUCT_CATEGORY, - _.pick(entity.toJSON(), 'key')); - res.status(204).end(); - }) - .catch(next), + .then((entity) => { + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PRODUCT_CATEGORY, + _.pick(entity.toJSON(), 'key')); + res.status(204).end(); + }) + .catch(next), ]; diff --git a/src/routes/productCategories/delete.spec.js b/src/routes/productCategories/delete.spec.js index d5ada904..198585ed 100644 --- a/src/routes/productCategories/delete.spec.js +++ b/src/routes/productCategories/delete.spec.js @@ -12,27 +12,27 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (key, err, next) => { if (err) throw err; setTimeout(() => - models.ProductCategory.findOne({ - where: { - key, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.ProductCategory.findOne({ + where: { + key, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/metadata/productCategories/${key}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/metadata/productCategories/${key}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; describe('DELETE product category', () => { diff --git a/src/routes/productCategories/get.js b/src/routes/productCategories/get.js index 8279dbc9..728e41fb 100644 --- a/src/routes/productCategories/get.js +++ b/src/routes/productCategories/get.js @@ -30,32 +30,32 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No productCategory found in ES'); - models.ProductCategory.findOne({ - where: { - key: req.params.key, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((productCategory) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No productCategory found in ES'); + models.ProductCategory.findOne({ + where: { + key: req.params.key, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((productCategory) => { // Not found - if (!productCategory) { - const apiErr = new Error(`Product category not found for key ${req.params.key}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!productCategory) { + const apiErr = new Error(`Product category not found for key ${req.params.key}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(productCategory); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('productCategories found in ES'); - res.json(data[0].inner_hits.productCategories.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(productCategory); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('productCategories found in ES'); + res.json(data[0].inner_hits.productCategories.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/productCategories/list.js b/src/routes/productCategories/list.js index 4a5553c9..bc02e2f8 100644 --- a/src/routes/productCategories/list.js +++ b/src/routes/productCategories/list.js @@ -11,21 +11,21 @@ module.exports = [ permissions('productCategory.view'), (req, res, next) => { util.fetchFromES('productCategories') - .then((data) => { - if (data.productCategories.length === 0) { - req.log.debug('No productCategory found in ES'); - models.ProductCategory.findAll({ - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then((productCategories) => { - res.json(productCategories); + .then((data) => { + if (data.productCategories.length === 0) { + req.log.debug('No productCategory found in ES'); + models.ProductCategory.findAll({ + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, }) - .catch(next); - } else { - req.log.debug('productCategories found in ES'); - res.json(data.productCategories); - } - }); + .then((productCategories) => { + res.json(productCategories); + }) + .catch(next); + } else { + req.log.debug('productCategories found in ES'); + res.json(data.productCategories); + } + }); }, ]; diff --git a/src/routes/productTemplates/create.js b/src/routes/productTemplates/create.js index 0dfcc4d1..978aeb74 100644 --- a/src/routes/productTemplates/create.js +++ b/src/routes/productTemplates/create.js @@ -38,8 +38,8 @@ const schema = { updatedBy: Joi.any().strip(), deletedBy: Joi.any().strip(), }) - .xor('form', 'template') - .required(), + .xor('form', 'template') + .required(), }; diff --git a/src/routes/productTemplates/delete.js b/src/routes/productTemplates/delete.js index f702a33b..b6c23e2f 100644 --- a/src/routes/productTemplates/delete.js +++ b/src/routes/productTemplates/delete.js @@ -21,7 +21,7 @@ module.exports = [ validate(schema), permissions('productTemplate.delete'), (req, res, next) => - models.sequelize.transaction(() => + models.sequelize.transaction(() => models.ProductTemplate.findByPk(req.params.templateId) .then((entity) => { if (!entity) { @@ -33,13 +33,13 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(entity => entity.destroy())) - .then((entity) => { - // emit event - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PRODUCT_TEMPLATE, - _.pick(entity.toJSON(), 'id')); - res.status(204).end(); - }) - .catch(next), + .then((entity) => { + // emit event + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PRODUCT_TEMPLATE, + _.pick(entity.toJSON(), 'id')); + res.status(204).end(); + }) + .catch(next), ]; diff --git a/src/routes/productTemplates/delete.spec.js b/src/routes/productTemplates/delete.spec.js index 893653eb..c9090a2c 100644 --- a/src/routes/productTemplates/delete.spec.js +++ b/src/routes/productTemplates/delete.spec.js @@ -11,27 +11,27 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (id, err, next) => { if (err) throw err; setTimeout(() => - models.ProductTemplate.findOne({ - where: { - id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.ProductTemplate.findOne({ + where: { + id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/metadata/productTemplates/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/metadata/productTemplates/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; diff --git a/src/routes/productTemplates/get.js b/src/routes/productTemplates/get.js index 96780c2b..6ed71f62 100644 --- a/src/routes/productTemplates/get.js +++ b/src/routes/productTemplates/get.js @@ -30,34 +30,34 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No productTemplate found in ES'); - models.ProductTemplate.findOne({ - where: { - deletedAt: { $eq: null }, - id: req.params.templateId, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then((productTemplate) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No productTemplate found in ES'); + models.ProductTemplate.findOne({ + where: { + deletedAt: { $eq: null }, + id: req.params.templateId, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }) + .then((productTemplate) => { // Not found - if (!productTemplate) { - const apiErr = new Error(`Product template not found for product id ${req.params.templateId}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!productTemplate) { + const apiErr = new Error(`Product template not found for product id ${req.params.templateId}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(productTemplate); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('productTemplates found in ES'); - res.json(data[0].inner_hits.productTemplates.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(productTemplate); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('productTemplates found in ES'); + res.json(data[0].inner_hits.productTemplates.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/productTemplates/list.js b/src/routes/productTemplates/list.js index f1816d86..ad54be40 100644 --- a/src/routes/productTemplates/list.js +++ b/src/routes/productTemplates/list.js @@ -11,30 +11,30 @@ module.exports = [ permissions('productTemplate.view'), (req, res, next) => { util.fetchFromES('productTemplates') - .then((data) => { - const filters = req.query; - if (!util.isValidFilter(filters, ['productKey'])) { - util.handleError('Invalid filters', null, req, next); - } - const where = { deletedAt: { $eq: null }, disabled: false }; - if (filters.productKey) { - where.productKey = { $eq: filters.productKey }; - } - if (data.productTemplates.length === 0) { - req.log.debug('No productTemplate found in ES'); - models.ProductTemplate.findAll({ - where, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then((productTemplates) => { - res.json(productTemplates); - }) - .catch(next); - } else { - req.log.debug('productTemplates found in ES'); - res.json(data.productTemplates); - } - }); + .then((data) => { + const filters = req.query; + if (!util.isValidFilter(filters, ['productKey'])) { + util.handleError('Invalid filters', null, req, next); + } + const where = { deletedAt: { $eq: null }, disabled: false }; + if (filters.productKey) { + where.productKey = { $eq: filters.productKey }; + } + if (data.productTemplates.length === 0) { + req.log.debug('No productTemplate found in ES'); + models.ProductTemplate.findAll({ + where, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }) + .then((productTemplates) => { + res.json(productTemplates); + }) + .catch(next); + } else { + req.log.debug('productTemplates found in ES'); + res.json(data.productTemplates); + } + }); }, ]; diff --git a/src/routes/productTemplates/list.spec.js b/src/routes/productTemplates/list.spec.js index 09af4696..788af5bf 100644 --- a/src/routes/productTemplates/list.spec.js +++ b/src/routes/productTemplates/list.spec.js @@ -16,7 +16,9 @@ const validateProductTemplates = (count, resJson, expectedTemplates) => { resJson.forEach((pt, idx) => { pt.should.include.all.keys('id', 'name', 'productKey', 'category', 'subCategory', 'icon', 'brief', 'details', - 'aliases', 'template', 'disabled', 'form', 'hidden', 'isAddOn', 'createdBy', 'createdAt', 'updatedBy', 'updatedAt'); + 'aliases', 'template', 'disabled', 'form', 'hidden', 'isAddOn', 'createdBy', 'createdAt', 'updatedBy', + 'updatedAt', + ); pt.should.not.include.all.keys('deletedAt', 'deletedBy'); pt.name.should.be.eql(expectedTemplates[idx].name); pt.productKey.should.be.eql(expectedTemplates[idx].productKey); @@ -93,11 +95,11 @@ describe('LIST product templates', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductTemplate.create(templates[0])) - .then((createdTemplate) => { - templateId = createdTemplate.id; - return models.ProductTemplate.create(templates[1]).then(() => done()); - }); + .then(() => models.ProductTemplate.create(templates[0])) + .then((createdTemplate) => { + templateId = createdTemplate.id; + return models.ProductTemplate.create(templates[1]).then(() => done()); + }); }); after((done) => { testUtil.clearDb(done); diff --git a/src/routes/productTemplates/update.js b/src/routes/productTemplates/update.js index a96c4c31..44a3d1e8 100644 --- a/src/routes/productTemplates/update.js +++ b/src/routes/productTemplates/update.js @@ -41,8 +41,8 @@ const schema = { updatedBy: Joi.any().strip(), deletedBy: Joi.any().strip(), }) - .xor('form', 'template') - .required(), + .xor('form', 'template') + .required(), }; module.exports = [ diff --git a/src/routes/productTemplates/update.spec.js b/src/routes/productTemplates/update.spec.js index 3526b1cd..bd11e9d6 100644 --- a/src/routes/productTemplates/update.spec.js +++ b/src/routes/productTemplates/update.spec.js @@ -71,34 +71,34 @@ describe('UPDATE product template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.Form.create(forms[0])) - .then(() => models.Form.create(forms[1])) - .then(() => models.ProductCategory.bulkCreate([ - { - key: 'generic', - displayName: 'Generic', - icon: 'http://example.com/icon1.ico', - question: 'question 1', - info: 'info 1', - aliases: ['key-1', 'key_1'], - createdBy: 1, - updatedBy: 1, - }, - { - key: 'concrete', - displayName: 'Concrete', - icon: 'http://example.com/icon1.ico', - question: 'question 2', - info: 'info 2', - aliases: ['key-2', 'key_2'], - createdBy: 1, - updatedBy: 1, - }, - ])) - .then(() => models.ProductTemplate.create(template).then((createdTemplate) => { - templateId = createdTemplate.id; - done(); - })); + .then(() => models.Form.create(forms[0])) + .then(() => models.Form.create(forms[1])) + .then(() => models.ProductCategory.bulkCreate([ + { + key: 'generic', + displayName: 'Generic', + icon: 'http://example.com/icon1.ico', + question: 'question 1', + info: 'info 1', + aliases: ['key-1', 'key_1'], + createdBy: 1, + updatedBy: 1, + }, + { + key: 'concrete', + displayName: 'Concrete', + icon: 'http://example.com/icon1.ico', + question: 'question 2', + info: 'info 2', + aliases: ['key-2', 'key_2'], + createdBy: 1, + updatedBy: 1, + }, + ])) + .then(() => models.ProductTemplate.create(template).then((createdTemplate) => { + templateId = createdTemplate.id; + done(); + })); }); after((done) => { testUtil.clearDb(done); diff --git a/src/routes/productTemplates/upgrade.spec.js b/src/routes/productTemplates/upgrade.spec.js index 9d39c696..407fc100 100644 --- a/src/routes/productTemplates/upgrade.spec.js +++ b/src/routes/productTemplates/upgrade.spec.js @@ -62,71 +62,71 @@ describe('UPGRADE product template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProductCategory.bulkCreate([ - { - key: 'generic', - displayName: 'Generic', - icon: 'http://example.com/icon1.ico', - question: 'question 1', - info: 'info 1', - aliases: ['key-1', 'key_1'], - createdBy: 1, - updatedBy: 1, - }, - { - key: 'concrete', - displayName: 'Concrete', - icon: 'http://example.com/icon1.ico', - question: 'question 2', - info: 'info 2', - aliases: ['key-2', 'key_2'], - createdBy: 1, - updatedBy: 1, - }, - ])) - .then(() => { - const config = { - sections: [{ - id: 'appDefinition', - title: 'Sample Project', - required: true, - description: 'Please answer a few basic questions', - subSections: [{ - id: 'projectName', - required: true, - validationError: 'Please provide a name for your project', - fieldName: 'name', - description: '', - title: 'Project Name', - type: 'project-name', - }, { - id: 'notes', - fieldName: 'details.appDefinition.notes', - title: 'Notes', - description: 'Add any other important information', - type: 'notes', - }], - }], - }; - models.Form.bulkCreate([ + .then(() => models.ProductCategory.bulkCreate([ { - key: 'newKey', - version: 1, - revision: 1, - config, + key: 'generic', + displayName: 'Generic', + icon: 'http://example.com/icon1.ico', + question: 'question 1', + info: 'info 1', + aliases: ['key-1', 'key_1'], + createdBy: 1, + updatedBy: 1, + }, + { + key: 'concrete', + displayName: 'Concrete', + icon: 'http://example.com/icon1.ico', + question: 'question 2', + info: 'info 2', + aliases: ['key-2', 'key_2'], createdBy: 1, updatedBy: 1, }, - ]); - }) - .then(() => models.ProductTemplate.create(productTemplate)) - .then((createdTemplate) => { - templateId = createdTemplate.id; - }) - .then(() => models.ProductTemplate.create(productTemplateMissed).then((createdTemplate) => { - missingTemplateId = createdTemplate.id; - done(); - })); + ])) + .then(() => { + const config = { + sections: [{ + id: 'appDefinition', + title: 'Sample Project', + required: true, + description: 'Please answer a few basic questions', + subSections: [{ + id: 'projectName', + required: true, + validationError: 'Please provide a name for your project', + fieldName: 'name', + description: '', + title: 'Project Name', + type: 'project-name', + }, { + id: 'notes', + fieldName: 'details.appDefinition.notes', + title: 'Notes', + description: 'Add any other important information', + type: 'notes', + }], + }], + }; + models.Form.bulkCreate([ + { + key: 'newKey', + version: 1, + revision: 1, + config, + createdBy: 1, + updatedBy: 1, + }, + ]); + }) + .then(() => models.ProductTemplate.create(productTemplate)) + .then((createdTemplate) => { + templateId = createdTemplate.id; + }) + .then(() => models.ProductTemplate.create(productTemplateMissed).then((createdTemplate) => { + missingTemplateId = createdTemplate.id; + done(); + })); }); after((done) => { testUtil.clearDb(done); diff --git a/src/routes/projectMemberInvites/create.js b/src/routes/projectMemberInvites/create.js index d35ded1f..60b1c570 100644 --- a/src/routes/projectMemberInvites/create.js +++ b/src/routes/projectMemberInvites/create.js @@ -287,142 +287,142 @@ module.exports = [ // we have to filter users returned by the Member Service so we only invite the users // whom we are inviting, because Member Service has a loose search logic and may return // users with handles whom we didn't search for - .then(foundUsers => foundUsers.filter(foundUser => _.includes(invite.handles, foundUser.handle))) - .then((inviteUsers) => { - const members = req.context.currentProjectMembers; - const projectId = _.parseInt(req.params.projectId); - // check user handle exists in returned result - const errorMessageHandleNotExist = 'User with such handle does not exist'; - if (!!invite.handles && invite.handles.length > 0) { - const existentHandles = _.map(inviteUsers, 'handle'); - failed = _.concat(failed, _.map(_.difference(invite.handles, existentHandles), handle => _.assign({}, { - handle, - message: errorMessageHandleNotExist, - }))); - } + .then(foundUsers => foundUsers.filter(foundUser => _.includes(invite.handles, foundUser.handle))) + .then((inviteUsers) => { + const members = req.context.currentProjectMembers; + const projectId = _.parseInt(req.params.projectId); + // check user handle exists in returned result + const errorMessageHandleNotExist = 'User with such handle does not exist'; + if (!!invite.handles && invite.handles.length > 0) { + const existentHandles = _.map(inviteUsers, 'handle'); + failed = _.concat(failed, _.map(_.difference(invite.handles, existentHandles), handle => _.assign({}, { + handle, + message: errorMessageHandleNotExist, + }))); + } - let inviteUserIds = _.map(inviteUsers, 'userId'); - const promises = []; - const errorMessageForAlreadyMemberUser = 'User with such handle is already a member of the team.'; + let inviteUserIds = _.map(inviteUsers, 'userId'); + const promises = []; + const errorMessageForAlreadyMemberUser = 'User with such handle is already a member of the team.'; - if (inviteUserIds) { + if (inviteUserIds) { // remove members already in the team - _.remove(inviteUserIds, u => _.some(members, (m) => { - const isPresent = m.userId === u; - if (isPresent) { - failed.push(_.assign({}, { - handle: getUserHandleById(m.userId, inviteUsers), - message: errorMessageForAlreadyMemberUser, - })); + _.remove(inviteUserIds, u => _.some(members, (m) => { + const isPresent = m.userId === u; + if (isPresent) { + failed.push(_.assign({}, { + handle: getUserHandleById(m.userId, inviteUsers), + message: errorMessageForAlreadyMemberUser, + })); + } + return isPresent; + })); + + // for each user invited by `handle` (userId) we have to load they Topcoder Roles, + // so we can check if such a user can be invited with desired Project Role + // for customers we don't check it to avoid extra call, as any Topcoder user can be invited as customer + if (invite.role !== PROJECT_MEMBER_ROLE.CUSTOMER) { + _.forEach(inviteUserIds, (userId) => { + req.log.info(userId); + promises.push(util.getUserRoles(userId, req.log, req.id)); + }); } - return isPresent; - })); - - // for each user invited by `handle` (userId) we have to load they Topcoder Roles, - // so we can check if such a user can be invited with desired Project Role - // for customers we don't check it to avoid extra call, as any Topcoder user can be invited as customer - if (invite.role !== PROJECT_MEMBER_ROLE.CUSTOMER) { - _.forEach(inviteUserIds, (userId) => { - req.log.info(userId); - promises.push(util.getUserRoles(userId, req.log, req.id)); - }); } - } - if (invite.emails) { + if (invite.emails) { // email invites can only be used for CUSTOMER role - if (invite.role !== PROJECT_MEMBER_ROLE.CUSTOMER) { // eslint-disable-line no-lonely-if - const message = `Emails can only be used for ${PROJECT_MEMBER_ROLE.CUSTOMER}`; - failed = _.concat(failed, _.map(invite.emails, email => _.assign({}, { email, message }))); - delete invite.emails; + if (invite.role !== PROJECT_MEMBER_ROLE.CUSTOMER) { // eslint-disable-line no-lonely-if + const message = `Emails can only be used for ${PROJECT_MEMBER_ROLE.CUSTOMER}`; + failed = _.concat(failed, _.map(invite.emails, email => _.assign({}, { email, message }))); + delete invite.emails; + } } - } - if (promises.length === 0) { - promises.push(Promise.resolve()); - } - return Promise.all(promises).then((rolesList) => { - if (inviteUserIds && invite.role !== PROJECT_MEMBER_ROLE.CUSTOMER) { - req.log.debug('Checking if users are allowed to be invited with desired Project Role.'); - const forbidUserList = []; - _.zip(inviteUserIds, rolesList).forEach((data) => { - const [userId, roles] = data; - - if (roles) { - req.log.debug(`Got user (id: ${userId}) Topcoder roles: ${roles.join(', ')}.`); - - if (!util.hasPermission({ topcoderRoles: PROJECT_TO_TOPCODER_ROLES_MATRIX[invite.role] }, { roles })) { + if (promises.length === 0) { + promises.push(Promise.resolve()); + } + return Promise.all(promises).then((rolesList) => { + if (inviteUserIds && invite.role !== PROJECT_MEMBER_ROLE.CUSTOMER) { + req.log.debug('Checking if users are allowed to be invited with desired Project Role.'); + const forbidUserList = []; + _.zip(inviteUserIds, rolesList).forEach((data) => { + const [userId, roles] = data; + + if (roles) { + req.log.debug(`Got user (id: ${userId}) Topcoder roles: ${roles.join(', ')}.`); + + if (!util.hasPermission({ topcoderRoles: PROJECT_TO_TOPCODER_ROLES_MATRIX[invite.role] }, { roles })) { + forbidUserList.push(userId); + } + } else { + req.log.debug(`Didn't get any Topcoder roles for user (id: ${userId}).`); forbidUserList.push(userId); } - } else { - req.log.debug(`Didn't get any Topcoder roles for user (id: ${userId}).`); - forbidUserList.push(userId); + }); + if (forbidUserList.length > 0) { + const message = `cannot be invited with a "${invite.role}" role to the project`; + failed = _.concat(failed, _.map(forbidUserList, + id => _.assign({}, { handle: getUserHandleById(id, inviteUsers), message }))); + req.log.debug(`Users with id(s) ${forbidUserList.join(', ')} ${message}`); + inviteUserIds = _.filter(inviteUserIds, userId => !_.includes(forbidUserList, userId)); } - }); - if (forbidUserList.length > 0) { - const message = `cannot be invited with a "${invite.role}" role to the project`; - failed = _.concat(failed, _.map(forbidUserList, - id => _.assign({}, { handle: getUserHandleById(id, inviteUsers), message }))); - req.log.debug(`Users with id(s) ${forbidUserList.join(', ')} ${message}`); - inviteUserIds = _.filter(inviteUserIds, userId => !_.includes(forbidUserList, userId)); } - } - return models.ProjectMemberInvite.getPendingInvitesForProject(projectId) - .then((invites) => { - const data = { - projectId, - role: invite.role, - // invite copilots directly if user has permissions - status: (invite.role !== PROJECT_MEMBER_ROLE.COPILOT || + return models.ProjectMemberInvite.getPendingInvitesForProject(projectId) + .then((invites) => { + const data = { + projectId, + role: invite.role, + // invite copilots directly if user has permissions + status: (invite.role !== PROJECT_MEMBER_ROLE.COPILOT || util.hasPermissionByReq(PERMISSION.CREATE_PROJECT_INVITE_COPILOT_DIRECTLY, req)) - ? INVITE_STATUS.PENDING - : INVITE_STATUS.REQUESTED, - createdBy: req.authUser.userId, - updatedBy: req.authUser.userId, - }; - req.log.debug('Creating invites'); - return models.Sequelize.Promise.all(buildCreateInvitePromises( - req, invite.emails, inviteUserIds, invites, data, failed, members, inviteUsers)) - .then((values) => { - values.forEach((v) => { + ? INVITE_STATUS.PENDING + : INVITE_STATUS.REQUESTED, + createdBy: req.authUser.userId, + updatedBy: req.authUser.userId, + }; + req.log.debug('Creating invites'); + return models.Sequelize.Promise.all(buildCreateInvitePromises( + req, invite.emails, inviteUserIds, invites, data, failed, members, inviteUsers)) + .then((values) => { + values.forEach((v) => { // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_CREATED, - RESOURCES.PROJECT_MEMBER_INVITE, - v.toJSON()); - - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_CREATED, - v, - { correlationId: req.id }, - ); - // send email invite (async) - if (v.email && !v.userId && v.status === INVITE_STATUS.PENDING) { - sendInviteEmail(req, projectId, v); - } - }); - return values.map(value => value.get({ plain: true })); - }); // models.sequelize.Promise.all - }); // models.ProjectMemberInvite.getPendingInvitesForProject - }) - .then(values => ( + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_CREATED, + RESOURCES.PROJECT_MEMBER_INVITE, + v.toJSON()); + + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_MEMBER_INVITE_CREATED, + v, + { correlationId: req.id }, + ); + // send email invite (async) + if (v.email && !v.userId && v.status === INVITE_STATUS.PENDING) { + sendInviteEmail(req, projectId, v); + } + }); + return values.map(value => value.get({ plain: true })); + }); // models.sequelize.Promise.all + }); // models.ProjectMemberInvite.getPendingInvitesForProject + }) + .then(values => ( // populate successful invites with user details if required - util.getObjectsWithMemberDetails(values, fields, req) - .catch((err) => { - req.log.error('Cannot get user details for invites.'); - req.log.debug('Error during getting user details for invites', err); - // continues without details anyway - return values; - }) - )) - .then((values) => { - const response = _.assign({}, { success: util.postProcessInvites('$[*]', values, req) }); - if (failed.length) { - res.status(403).json(_.assign({}, response, { failed })); - } else { - res.status(201).json(response); - } - }); - }).catch(err => next(err)); + util.getObjectsWithMemberDetails(values, fields, req) + .catch((err) => { + req.log.error('Cannot get user details for invites.'); + req.log.debug('Error during getting user details for invites', err); + // continues without details anyway + return values; + }) + )) + .then((values) => { + const response = _.assign({}, { success: util.postProcessInvites('$[*]', values, req) }); + if (failed.length) { + res.status(403).json(_.assign({}, response, { failed })); + } else { + res.status(201).json(response); + } + }); + }).catch(err => next(err)); }, ]; diff --git a/src/routes/projectMemberInvites/create.spec.js b/src/routes/projectMemberInvites/create.spec.js index 7034a374..cef73d72 100644 --- a/src/routes/projectMemberInvites/create.spec.js +++ b/src/routes/projectMemberInvites/create.spec.js @@ -217,56 +217,56 @@ describe('Project Member Invite create', () => { }); it('should return 201 if userIds and emails are presented the same time', - (done) => { - request(server) - .post(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - handles: ['test_customer1'], - emails: ['hello@world.com'], - role: 'customer', - }) - .expect('Content-Type', /json/) - .expect(201) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body.success[1]; - should.exist(resJson); - resJson.role.should.equal('customer'); - resJson.projectId.should.equal(project1.id); - resJson.email.should.equal('hello@world.com'); - server.services.pubsub.publish.calledWith('project.member.invite.created').should.be.true; - done(); - } - }); - }); + (done) => { + request(server) + .post(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + handles: ['test_customer1'], + emails: ['hello@world.com'], + role: 'customer', + }) + .expect('Content-Type', /json/) + .expect(201) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body.success[1]; + should.exist(resJson); + resJson.role.should.equal('customer'); + resJson.projectId.should.equal(project1.id); + resJson.email.should.equal('hello@world.com'); + server.services.pubsub.publish.calledWith('project.member.invite.created').should.be.true; + done(); + } + }); + }); it('should return 400 if neither handles or email is presented', - (done) => { - request(server) - .post(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - role: 'customer', - }) - .expect('Content-Type', /json/) - .expect(400) - .end((err, res) => { - if (err) { - done(err); - } else { - const errorMessage = _.get(res.body, 'message', ''); - sinon.assert.match(errorMessage, /.*Either handles or emails are required/); - done(); - } - }); - }); + (done) => { + request(server) + .post(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + role: 'customer', + }) + .expect('Content-Type', /json/) + .expect(400) + .end((err, res) => { + if (err) { + done(err); + } else { + const errorMessage = _.get(res.body, 'message', ''); + sinon.assert.match(errorMessage, /.*Either handles or emails are required/); + done(); + } + }); + }); it('should return 403 if try to create copilot without MANAGER_ROLES', (done) => { const mockHttpClient = _.merge(testUtil.mockHttpClient, { @@ -698,13 +698,13 @@ describe('Project Member Invite create', () => { }); }); - it('should invite a user as "manager" using M2M token with "write:project-members" scope', (done) => { + it('should invite a user as "manager" using M2M token with "write:project-invites" scope', (done) => { util.getUserRoles.restore(); sandbox.stub(util, 'getUserRoles', () => Promise.resolve([USER_ROLE.MANAGER])); request(server) .post(`/v5/projects/${project1.id}/invites`) .set({ - Authorization: `Bearer ${testUtil.m2m['write:project-members']}`, + Authorization: `Bearer ${testUtil.m2m['write:project-invites']}`, }) .send({ handles: ['test_manager1'], @@ -922,41 +922,41 @@ describe('Project Member Invite create', () => { it('should send correct BUS API messages when invite added by handle', (done) => { request(server) - .post(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) - .send({ - handles: ['test_user2'], - role: PROJECT_MEMBER_ROLE.CUSTOMER, - }) - .expect(201) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER_INVITE, - projectId: project1.id, - userId: 40011578, - email: null, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ - projectId: project1.id, - userId: 40011578, - email: null, - isSSO: false, - })).should.be.true; + .post(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send({ + handles: ['test_user2'], + role: PROJECT_MEMBER_ROLE.CUSTOMER, + }) + .expect(201) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); - done(); - }); - } - }); + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER_INVITE, + projectId: project1.id, + userId: 40011578, + email: null, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ + projectId: project1.id, + userId: 40011578, + email: null, + isSSO: false, + })).should.be.true; + + done(); + }); + } + }); }); it('should send correct BUS API messages when invite added by email', (done) => { @@ -970,44 +970,44 @@ describe('Project Member Invite create', () => { }); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .post(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) - .send({ - emails: ['hello@world.com'], - role: PROJECT_MEMBER_ROLE.CUSTOMER, - }) - .expect(201) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER_INVITE, - projectId: project1.id, - userId: null, - email: 'hello@world.com', - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ - projectId: project1.id, - userId: null, - email: 'hello@world.com', - isSSO: false, - })).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_EMAIL_INVITE_CREATED, sinon.match({ - recipients: ['hello@world.com'], - })).should.be.true; + .post(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send({ + emails: ['hello@world.com'], + role: PROJECT_MEMBER_ROLE.CUSTOMER, + }) + .expect(201) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(3); - done(); - }); - } - }); + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER_INVITE, + projectId: project1.id, + userId: null, + email: 'hello@world.com', + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ + projectId: project1.id, + userId: null, + email: 'hello@world.com', + isSSO: false, + })).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_EMAIL_INVITE_CREATED, sinon.match({ + recipients: ['hello@world.com'], + })).should.be.true; + + done(); + }); + } + }); }); }); }); diff --git a/src/routes/projectMemberInvites/delete.spec.js b/src/routes/projectMemberInvites/delete.spec.js index 05c34564..fbb601ec 100644 --- a/src/routes/projectMemberInvites/delete.spec.js +++ b/src/routes/projectMemberInvites/delete.spec.js @@ -376,29 +376,29 @@ describe('Project member invite delete', () => { }); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .delete(`/v5/projects/${project1.id}/invites/3`) - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) - .expect(204) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); - - // Events for accepted invite - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_REMOVED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER_INVITE, - projectId: project1.id, - id: 3, - })).should.be.true; - - done(); - }); - } - }); + .delete(`/v5/projects/${project1.id}/invites/3`) + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); + + // Events for accepted invite + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_REMOVED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER_INVITE, + projectId: project1.id, + id: 3, + })).should.be.true; + + done(); + }); + } + }); }); }); }); diff --git a/src/routes/projectMemberInvites/get.js b/src/routes/projectMemberInvites/get.js index e9b69b6e..0bae06d2 100644 --- a/src/routes/projectMemberInvites/get.js +++ b/src/routes/projectMemberInvites/get.js @@ -93,7 +93,7 @@ module.exports = [ // check there is an existing invite for the user with status PENDING // handle 404 let errMsg; - if (req.context.inviteType === 'all') { + if (util.hasPermissionByReq(PERMISSION.READ_PROJECT_INVITE_NOT_OWN, req)) { errMsg = `invite not found for project id ${projectId}, inviteId ${inviteId}`; } else { errMsg = `invite not found for project id ${projectId}, inviteId ${inviteId}, ` + @@ -118,7 +118,7 @@ module.exports = [ return invite; }) )) - .then(invite => res.json(util.postProcessInvites('$.email', invite, req))) - .catch(next); + .then(invite => res.json(util.postProcessInvites('$.email', invite, req))) + .catch(next); }, ]; diff --git a/src/routes/projectMemberInvites/get.spec.js b/src/routes/projectMemberInvites/get.spec.js index 8284ba00..6b543048 100644 --- a/src/routes/projectMemberInvites/get.spec.js +++ b/src/routes/projectMemberInvites/get.spec.js @@ -16,97 +16,97 @@ describe('GET Project Member Invite', () => { // clear ES and db testUtil.clearES().then(() => { testUtil.clearDb() - .then(() => { - const p1 = models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - const pm1 = models.ProjectMember.create({ - userId: testUtil.userIds.admin, - projectId: project1.id, - role: 'copilot', - isPrimary: true, + .then(() => { + const p1 = models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, createdBy: 1, updatedBy: 1, - }); - // create invite - const invite1 = models.ProjectMemberInvite.create({ - id: 1, - userId: testUtil.userIds.member, - email: null, - projectId: project1.id, - role: 'customer', - createdBy: 1, - updatedBy: 1, - status: INVITE_STATUS.PENDING, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + const pm1 = models.ProjectMember.create({ + userId: testUtil.userIds.admin, + projectId: project1.id, + role: 'copilot', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }); + // create invite + const invite1 = models.ProjectMemberInvite.create({ + id: 1, + userId: testUtil.userIds.member, + email: null, + projectId: project1.id, + role: 'customer', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.PENDING, + }); + + const invite2 = models.ProjectMemberInvite.create({ + id: 2, + userId: testUtil.userIds.copilot, + email: 'test@topcoder.com', + projectId: project1.id, + role: 'copilot', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.PENDING, + }); + + return Promise.all([pm1, invite1, invite2]); }); - const invite2 = models.ProjectMemberInvite.create({ - id: 2, - userId: testUtil.userIds.copilot, - email: 'test@topcoder.com', - projectId: project1.id, - role: 'copilot', + const p2 = models.Project.create({ + type: 'visual_design', + billingAccountId: 1, + name: 'test2', + description: 'test project2', + status: 'draft', + details: {}, createdBy: 1, updatedBy: 1, - status: INVITE_STATUS.PENDING, - }); - - return Promise.all([pm1, invite1, invite2]); - }); + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project2 = p; - const p2 = models.Project.create({ - type: 'visual_design', - billingAccountId: 1, - name: 'test2', - description: 'test project2', - status: 'draft', - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project2 = p; + // create invite 3 + const invite3 = models.ProjectMemberInvite.create({ + id: 3, + userId: null, + email: 'test@topcoder.com', + projectId: project2.id, + role: 'customer', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.PENDING, + }); - // create invite 3 - const invite3 = models.ProjectMemberInvite.create({ - id: 3, - userId: null, - email: 'test@topcoder.com', - projectId: project2.id, - role: 'customer', - createdBy: 1, - updatedBy: 1, - status: INVITE_STATUS.PENDING, - }); + const invite4 = models.ProjectMemberInvite.create({ + id: 4, + userId: testUtil.userIds.member2, + email: null, + projectId: project2.id, + role: 'customer', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.ACCEPTED, + }); - const invite4 = models.ProjectMemberInvite.create({ - id: 4, - userId: testUtil.userIds.member2, - email: null, - projectId: project2.id, - role: 'customer', - createdBy: 1, - updatedBy: 1, - status: INVITE_STATUS.ACCEPTED, + return Promise.all([invite3, invite4]); }); - - return Promise.all([invite3, invite4]); - }); - return Promise.all([p1, p2]) + return Promise.all([p1, p2]) .then(() => done()); - }); + }); }); }); @@ -117,17 +117,17 @@ describe('GET Project Member Invite', () => { describe('GET /projects/{projectId}/invites/{inviteId}', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get(`/v5/projects/${project2.id}/invites/1`) - .expect(403, done); + .get(`/v5/projects/${project2.id}/invites/1`) + .expect(403, done); }); it('should return 404 if requested project doesn\'t exist', (done) => { request(server) - .get('/v5/projects/14343323/invites/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, done); + .get('/v5/projects/14343323/invites/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); }); it('should return 404 if requested invitation doesn\'t exist', (done) => { @@ -168,48 +168,48 @@ describe('GET Project Member Invite', () => { it('should return the invite if user can view the project', (done) => { request(server) - .get(`/v5/projects/${project1.id}/invites/1`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - should.exist(resJson.projectId); - resJson.id.should.be.eql(1); - resJson.userId.should.be.eql(testUtil.userIds.member); - resJson.status.should.be.eql(INVITE_STATUS.PENDING); - done(); - } - }); + .get(`/v5/projects/${project1.id}/invites/1`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + should.exist(resJson.projectId); + resJson.id.should.be.eql(1); + resJson.userId.should.be.eql(testUtil.userIds.member); + resJson.status.should.be.eql(INVITE_STATUS.PENDING); + done(); + } + }); }); - it('should return the invite using M2M token with "read:project-members" scope', (done) => { + it('should return the invite using M2M token with "read:project-invites" scope', (done) => { request(server) - .get(`/v5/projects/${project1.id}/invites/1`) - .set({ - Authorization: `Bearer ${testUtil.m2m['read:project-members']}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - should.exist(resJson.projectId); - resJson.id.should.be.eql(1); - resJson.userId.should.be.eql(testUtil.userIds.member); - resJson.status.should.be.eql(INVITE_STATUS.PENDING); - done(); - } - }); + .get(`/v5/projects/${project1.id}/invites/1`) + .set({ + Authorization: `Bearer ${testUtil.m2m['read:project-invites']}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + should.exist(resJson.projectId); + resJson.id.should.be.eql(1); + resJson.userId.should.be.eql(testUtil.userIds.member); + resJson.status.should.be.eql(INVITE_STATUS.PENDING); + done(); + } + }); }); it('should return the invite if this invitation is for logged-in user', (done) => { diff --git a/src/routes/projectMemberInvites/list.spec.js b/src/routes/projectMemberInvites/list.spec.js index bcce0e8a..60fc4e33 100644 --- a/src/routes/projectMemberInvites/list.spec.js +++ b/src/routes/projectMemberInvites/list.spec.js @@ -17,97 +17,97 @@ describe('GET Project Member Invites', () => { // clear ES and db testUtil.clearES().then(() => { testUtil.clearDb() - .then(() => { - const p1 = models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - const pm1 = models.ProjectMember.create({ - userId: testUtil.userIds.admin, - projectId: project1.id, - role: 'copilot', - isPrimary: true, + .then(() => { + const p1 = models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, createdBy: 1, updatedBy: 1, - }); - // create invite - const invite1 = models.ProjectMemberInvite.create({ - id: 1, - userId: testUtil.userIds.member, - email: null, - projectId: project1.id, - role: 'customer', - createdBy: 1, - updatedBy: 1, - status: INVITE_STATUS.PENDING, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + const pm1 = models.ProjectMember.create({ + userId: testUtil.userIds.admin, + projectId: project1.id, + role: 'copilot', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }); + // create invite + const invite1 = models.ProjectMemberInvite.create({ + id: 1, + userId: testUtil.userIds.member, + email: null, + projectId: project1.id, + role: 'customer', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.PENDING, + }); + + const invite2 = models.ProjectMemberInvite.create({ + id: 2, + userId: testUtil.userIds.copilot, + email: null, + projectId: project1.id, + role: 'copilot', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.PENDING, + }); + + return Promise.all([pm1, invite1, invite2]); }); - const invite2 = models.ProjectMemberInvite.create({ - id: 2, - userId: testUtil.userIds.copilot, - email: null, - projectId: project1.id, - role: 'copilot', + const p2 = models.Project.create({ + type: 'visual_design', + billingAccountId: 1, + name: 'test2', + description: 'test project2', + status: 'draft', + details: {}, createdBy: 1, updatedBy: 1, - status: INVITE_STATUS.PENDING, - }); + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project2 = p; - return Promise.all([pm1, invite1, invite2]); - }); - - const p2 = models.Project.create({ - type: 'visual_design', - billingAccountId: 1, - name: 'test2', - description: 'test project2', - status: 'draft', - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project2 = p; + // create invite 3 + const invite3 = models.ProjectMemberInvite.create({ + id: 3, + userId: null, + email: 'test@topcoder.com', + projectId: project2.id, + role: 'customer', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.PENDING, + }); - // create invite 3 - const invite3 = models.ProjectMemberInvite.create({ - id: 3, - userId: null, - email: 'test@topcoder.com', - projectId: project2.id, - role: 'customer', - createdBy: 1, - updatedBy: 1, - status: INVITE_STATUS.PENDING, - }); + const invite4 = models.ProjectMemberInvite.create({ + id: 4, + userId: testUtil.userIds.member2, + email: null, + projectId: project2.id, + role: 'customer', + createdBy: 1, + updatedBy: 1, + status: INVITE_STATUS.ACCEPTED, + }); - const invite4 = models.ProjectMemberInvite.create({ - id: 4, - userId: testUtil.userIds.member2, - email: null, - projectId: project2.id, - role: 'customer', - createdBy: 1, - updatedBy: 1, - status: INVITE_STATUS.ACCEPTED, + return Promise.all([invite3, invite4]); }); - - return Promise.all([invite3, invite4]); - }); - return Promise.all([p1, p2]) + return Promise.all([p1, p2]) .then(() => done()); - }); + }); }); }); @@ -118,99 +118,99 @@ describe('GET Project Member Invites', () => { describe('GET /projects/{projectId}/invites', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get(`/v5/projects/${project2.id}/invites`) - .expect(403, done); + .get(`/v5/projects/${project2.id}/invites`) + .expect(403, done); }); it('should return empty result if requested project doesn\'t exist', (done) => { request(server) - .get('/v5/projects/14343323/invites') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.be.an('array'); - resJson.length.should.be.eql(0); - done(); - } - }); + .get('/v5/projects/14343323/invites') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.be.an('array'); + resJson.length.should.be.eql(0); + done(); + } + }); }); it('should return all invitation if user can view the project', (done) => { request(server) - .get(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.be.an('array'); - resJson.length.should.be.eql(2); - // check invitations - _.filter(resJson, inv => inv.id === 1).length.should.be.eql(1); - _.filter(resJson, inv => inv.id === 2).length.should.be.eql(1); - done(); - } - }); + .get(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.be.an('array'); + resJson.length.should.be.eql(2); + // check invitations + _.filter(resJson, inv => inv.id === 1).length.should.be.eql(1); + _.filter(resJson, inv => inv.id === 2).length.should.be.eql(1); + done(); + } + }); }); - it('should get invites using M2M token with "read:project-members" scope', (done) => { + it('should get invites using M2M token with "read:project-invites" scope', (done) => { request(server) - .get(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.m2m['read:project-members']}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.be.an('array'); - resJson.length.should.be.eql(2); - // check invitations - _.filter(resJson, inv => inv.id === 1).length.should.be.eql(1); - _.filter(resJson, inv => inv.id === 2).length.should.be.eql(1); - done(); - } - }); + .get(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.m2m['read:project-invites']}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.be.an('array'); + resJson.length.should.be.eql(2); + // check invitations + _.filter(resJson, inv => inv.id === 1).length.should.be.eql(1); + _.filter(resJson, inv => inv.id === 2).length.should.be.eql(1); + done(); + } + }); }); it('should return only pending/requested invitation if user can view the project', (done) => { request(server) - .get(`/v5/projects/${project2.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.be.an('array'); - resJson.length.should.be.eql(1); - // check invitations - _.filter(resJson, inv => inv.id === 3).length.should.be.eql(1); - done(); - } - }); + .get(`/v5/projects/${project2.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.be.an('array'); + resJson.length.should.be.eql(1); + // check invitations + _.filter(resJson, inv => inv.id === 3).length.should.be.eql(1); + done(); + } + }); }); it('should return only his/her invitation for logged-in user', (done) => { diff --git a/src/routes/projectMemberInvites/update.js b/src/routes/projectMemberInvites/update.js index 972ceb0e..10668474 100644 --- a/src/routes/projectMemberInvites/update.js +++ b/src/routes/projectMemberInvites/update.js @@ -15,12 +15,12 @@ const permissions = tcMiddleware.permissions; const updateMemberValidations = { body: Joi.object() - .keys({ - status: Joi.any() - .valid(_.values(INVITE_STATUS)) - .required(), - }) - .required(), + .keys({ + status: Joi.any() + .valid(_.values(INVITE_STATUS)) + .required(), + }) + .required(), }; module.exports = [ diff --git a/src/routes/projectMemberInvites/update.spec.js b/src/routes/projectMemberInvites/update.spec.js index 5c6c2657..db8ead48 100644 --- a/src/routes/projectMemberInvites/update.spec.js +++ b/src/routes/projectMemberInvites/update.spec.js @@ -408,65 +408,65 @@ describe('Project member invite update', () => { }); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .patch(`/v5/projects/${project1.id}/invites/1`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .send({ - status: INVITE_STATUS.ACCEPTED, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(5); - - // Events for accepted invite - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_UPDATED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER_INVITE, - projectId: project1.id, - userId: testUtil.userIds.member, - status: INVITE_STATUS.ACCEPTED, - email: null, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_UPDATED, sinon.match({ - projectId: project1.id, - userId: testUtil.userIds.member, - status: INVITE_STATUS.ACCEPTED, - email: null, - isSSO: false, - })).should.be.true; - - // Events for created member (after invite acceptance) - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_ADDED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER, - projectId: project1.id, - userId: testUtil.userIds.member, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MEMBER_JOINED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - userId: testUtil.userIds.member, - initiatorUserId: testUtil.userIds.member, - })).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - userId: testUtil.userIds.member, - initiatorUserId: testUtil.userIds.member, - })).should.be.true; - - done(); - }); - } - }); + .patch(`/v5/projects/${project1.id}/invites/1`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .send({ + status: INVITE_STATUS.ACCEPTED, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(5); + + // Events for accepted invite + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_UPDATED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER_INVITE, + projectId: project1.id, + userId: testUtil.userIds.member, + status: INVITE_STATUS.ACCEPTED, + email: null, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_UPDATED, sinon.match({ + projectId: project1.id, + userId: testUtil.userIds.member, + status: INVITE_STATUS.ACCEPTED, + email: null, + isSSO: false, + })).should.be.true; + + // Events for created member (after invite acceptance) + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_ADDED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER, + projectId: project1.id, + userId: testUtil.userIds.member, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MEMBER_JOINED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + userId: testUtil.userIds.member, + initiatorUserId: testUtil.userIds.member, + })).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + userId: testUtil.userIds.member, + initiatorUserId: testUtil.userIds.member, + })).should.be.true; + + done(); + }); + } + }); }); }); }); diff --git a/src/routes/projectMembers/create.spec.js b/src/routes/projectMembers/create.spec.js index ea4c2f81..12234fc4 100644 --- a/src/routes/projectMembers/create.spec.js +++ b/src/routes/projectMembers/create.spec.js @@ -113,72 +113,72 @@ describe('Project Members create', () => { }); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .post(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - handles: ['test_copilot1'], - role: 'copilot', - }) - .expect('Content-Type', /json/) - .expect(201) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body.success[0]; - should.exist(resJson); - resJson.role.should.equal('copilot'); - resJson.projectId.should.equal(project1.id); - resJson.userId.should.equal(40051332); - should.exist(resJson.id); - server.services.pubsub.publish.calledWith('project.member.invite.created').should.be.true; - request(server) - .patch(`/v5/projects/${project1.id}/invites/${resJson.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) - .send({ - status: 'accepted', - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err2, res2) => { - if (err2) { - done(err2); - } else { - const resJson2 = res2.body; - should.exist(resJson2); - resJson2.role.should.equal('copilot'); - resJson2.projectId.should.equal(project1.id); - resJson2.userId.should.equal(40051332); - server.services.pubsub.publish.calledWith('project.member.invite.updated').should.be.true; - server.services.pubsub.publish.calledWith('project.member.added').should.be.true; + .post(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + handles: ['test_copilot1'], + role: 'copilot', + }) + .expect('Content-Type', /json/) + .expect(201) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body.success[0]; + should.exist(resJson); + resJson.role.should.equal('copilot'); + resJson.projectId.should.equal(project1.id); + resJson.userId.should.equal(40051332); + should.exist(resJson.id); + server.services.pubsub.publish.calledWith('project.member.invite.created').should.be.true; + request(server) + .patch(`/v5/projects/${project1.id}/invites/${resJson.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) + .send({ + status: 'accepted', + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err2, res2) => { + if (err2) { + done(err2); + } else { + const resJson2 = res2.body; + should.exist(resJson2); + resJson2.role.should.equal('copilot'); + resJson2.projectId.should.equal(project1.id); + resJson2.userId.should.equal(40051332); + server.services.pubsub.publish.calledWith('project.member.invite.updated').should.be.true; + server.services.pubsub.publish.calledWith('project.member.added').should.be.true; - request(server) - .patch(`/v5/projects/${project1.id}/invites/${resJson.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) - .send({ - status: 'accepted', - }) - .expect('Content-Type', /json/) - .expect(404) - .end((err3, res3) => { - if (err3) { - done(err3); - } else { - const errorMessage = _.get(res3.body, 'message', ''); - sinon.assert.match(errorMessage, /.*invite not found for project id 1, inviteId/); - done(); - } - }); - } - }); - } - }); + request(server) + .patch(`/v5/projects/${project1.id}/invites/${resJson.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) + .send({ + status: 'accepted', + }) + .expect('Content-Type', /json/) + .expect(404) + .end((err3, res3) => { + if (err3) { + done(err3); + } else { + const errorMessage = _.get(res3.body, 'message', ''); + sinon.assert.match(errorMessage, /.*invite not found for project id 1, inviteId/); + done(); + } + }); + } + }); + } + }); }); it('should return 201 and register customer member', (done) => { @@ -398,38 +398,38 @@ describe('Project Members create', () => { }); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .post(`/v5/projects/${project1.id}/members/`) - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) - .expect(201) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(3); + .post(`/v5/projects/${project1.id}/members/`) + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .expect(201) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(3); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_ADDED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER, - projectId: project1.id, - userId: 40051334, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_ADDED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER, + projectId: project1.id, + userId: 40051334, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MEMBER_JOINED_MANAGER).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051334, - initiatorUserId: 40051334, - })).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MEMBER_JOINED_MANAGER).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051334, + initiatorUserId: 40051334, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when copilot added', (done) => { @@ -468,85 +468,87 @@ describe('Project Members create', () => { }); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .post(`/v5/projects/${project1.id}/invites`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member2}`, - }) - .send({ - handles: ['test_copilot1'], - role: 'copilot', - }) - .expect(201) - .end((err, inviteRes) => { - if (err) { - done(err); - } else { - const inviteResJson = inviteRes.body.success[0]; - should.exist(inviteResJson); - should.exist(inviteResJson.id); - request(server) - .patch(`/v5/projects/${project1.id}/invites/${inviteResJson.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) - .send({ - status: 'accepted', - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err2) => { - if (err2) { - done(err2); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(7); + .post(`/v5/projects/${project1.id}/invites`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member2}`, + }) + .send({ + handles: ['test_copilot1'], + role: 'copilot', + }) + .expect(201) + .end((err, inviteRes) => { + if (err) { + done(err); + } else { + const inviteResJson = inviteRes.body.success[0]; + should.exist(inviteResJson); + should.exist(inviteResJson.id); + request(server) + .patch(`/v5/projects/${project1.id}/invites/${inviteResJson.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) + .send({ + status: 'accepted', + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err2) => { + if (err2) { + done(err2); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(7); - /* + /* Copilot invitation requested */ - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER_INVITE, - projectId: project1.id, - userId: 40051332, - email: null, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_CREATED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER_INVITE, + projectId: project1.id, + userId: 40051332, + email: null, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_REQUESTED).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_REQUESTED) + .should.be.true; - /* + /* Copilot invitation accepted */ - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_UPDATED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER_INVITE, - projectId: project1.id, - userId: 40051332, - status: INVITE_STATUS.ACCEPTED, - email: null, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_INVITE_UPDATED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER_INVITE, + projectId: project1.id, + userId: 40051332, + status: INVITE_STATUS.ACCEPTED, + email: null, + })).should.be.true; - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_ADDED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER, - projectId: project1.id, - userId: 40051332, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_ADDED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER, + projectId: project1.id, + userId: 40051332, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_UPDATED).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MEMBER_JOINED_COPILOT).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051332, - initiatorUserId: testUtil.userIds.connectAdmin, - })).should.be.true; - done(); + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_MEMBER_INVITE_UPDATED) + .should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.MEMBER_JOINED_COPILOT).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051332, + initiatorUserId: testUtil.userIds.connectAdmin, + })).should.be.true; + done(); + }); + } }); - } - }); - } - }); + } + }); }); }); }); diff --git a/src/routes/projectMembers/delete.js b/src/routes/projectMembers/delete.js index be7fd707..18d43702 100644 --- a/src/routes/projectMembers/delete.js +++ b/src/routes/projectMembers/delete.js @@ -21,81 +21,81 @@ module.exports = [ models.sequelize.transaction(() => // soft delete the record - models.ProjectMember.findOne({ - where: { id: memberRecordId, projectId }, - }) - .then((member) => { - if (!member) { - const err = new Error(`Project member not found for member id ${req.params.id}`); - err.status = 404; - return Promise.reject(err); - } + models.ProjectMember.findOne({ + where: { id: memberRecordId, projectId }, + }) + .then((member) => { + if (!member) { + const err = new Error(`Project member not found for member id ${req.params.id}`); + err.status = 404; + return Promise.reject(err); + } - if ( - member.userId !== req.authUser.userId && + if ( + member.userId !== req.authUser.userId && member.role !== PROJECT_MEMBER_ROLE.CUSTOMER && !util.hasPermissionByReq(PERMISSION.DELETE_PROJECT_MEMBER_NON_CUSTOMER, req) - ) { - const err = new Error('You don\'t have permissions to delete other members with non-customer role.'); - err.status = 403; - return Promise.reject(err); - } - return member.update({ deletedBy: req.authUser.userId }); - }) - .then(member => member.destroy({ logging: console.log })) // eslint-disable-line no-console - .then(member => member.save()) + ) { + const err = new Error('You don\'t have permissions to delete other members with non-customer role.'); + err.status = 403; + return Promise.reject(err); + } + return member.update({ deletedBy: req.authUser.userId }); + }) + .then(member => member.destroy({ logging: console.log })) // eslint-disable-line no-console + .then(member => member.save()) // if primary co-pilot is removed promote the next co-pilot to primary #43 - .then(member => new Promise((accept, reject) => { - if (member.role === PROJECT_MEMBER_ROLE.COPILOT && member.isPrimary) { + .then(member => new Promise((accept, reject) => { + if (member.role === PROJECT_MEMBER_ROLE.COPILOT && member.isPrimary) { // find the next copilot - models.ProjectMember.findAll({ - limit: 1, + models.ProjectMember.findAll({ + limit: 1, // return only non-deleted records - paranoid: true, - where: { - projectId, - role: PROJECT_MEMBER_ROLE.COPILOT, - }, - order: [['createdAt', 'ASC']], - }).then((members) => { - if (members && members.length > 0) { + paranoid: true, + where: { + projectId, + role: PROJECT_MEMBER_ROLE.COPILOT, + }, + order: [['createdAt', 'ASC']], + }).then((members) => { + if (members && members.length > 0) { // mark the copilot as primary - const nextMember = members[0]; - nextMember.set({ isPrimary: true }); - nextMember.save().then(() => { - accept(member); - }).catch((err) => { - reject(err); - }); - } else { + const nextMember = members[0]; + nextMember.set({ isPrimary: true }); + nextMember.save().then(() => { + accept(member); + }).catch((err) => { + reject(err); + }); + } else { // no copilot found nothing to do - accept(member); - } - }).catch((err) => { - reject(err); - }); - } else { + accept(member); + } + }).catch((err) => { + reject(err); + }); + } else { // nothing to do - accept(member); - } - }))).then((member) => { - // only return the response after transaction is committed - // fire event - const pmember = member.get({ plain: true }); - req.log.debug(pmember); - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_MEMBER_REMOVED, - pmember, - { correlationId: req.id }, - ); + accept(member); + } + }))).then((member) => { + // only return the response after transaction is committed + // fire event + const pmember = member.get({ plain: true }); + req.log.debug(pmember); + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_MEMBER_REMOVED, + pmember, + { correlationId: req.id }, + ); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_MEMBER_REMOVED, - RESOURCES.PROJECT_MEMBER, - pmember); - res.status(204).json({}); - }).catch(err => next(err)); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_MEMBER_REMOVED, + RESOURCES.PROJECT_MEMBER, + pmember); + res.status(204).json({}); + }).catch(err => next(err)); }, ]; diff --git a/src/routes/projectMembers/delete.spec.js b/src/routes/projectMembers/delete.spec.js index 3834e39b..e9989df6 100644 --- a/src/routes/projectMembers/delete.spec.js +++ b/src/routes/projectMembers/delete.spec.js @@ -16,20 +16,20 @@ const should = chai.should(); const expectAfterDelete = (projectId, id, err, next) => { if (err) throw err; setTimeout(() => - models.ProjectMember.findOne({ - where: { - id, - projectId, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - next(); - } - }), 500); + models.ProjectMember.findOne({ + where: { + id, + projectId, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + next(); + } + }), 500); }; describe('Project members delete', () => { let project1; diff --git a/src/routes/projectMembers/get.js b/src/routes/projectMembers/get.js index 0610a85a..f9ef759f 100644 --- a/src/routes/projectMembers/get.js +++ b/src/routes/projectMembers/get.js @@ -55,47 +55,47 @@ module.exports = [ }, }, }) - .then((data) => { - if (data.length === 0) { - req.log.debug('No project member found in ES'); - return models.ProjectMember.findOne({ - where: { - id: memberRecordId, - projectId }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then((member) => { - if (!member) { - // check there is an existing member - const err = new Error(`member not found for project id ${projectId}, id ${memberRecordId}`); - err.status = 404; - throw err; - } - return member; - }); - } - req.log.debug('project member found in ES'); - return _.pick( - data[0].inner_hits.members.hits.hits[0]._source, // eslint-disable-line no-underscore-dangle - // Elasticsearch index might have additional fields added to members like - // 'handle', 'firstName', 'lastName', 'email' - // but we shouldn't return them, as they might be outdated - // method "getObjectsWithMemberDetails" would populate these fields again - // with up to date data from Member Service if necessary - PROJECT_MEMBER_ATTRIBUTES, - ); - }).then(member => ( - util.getObjectsWithMemberDetails([member], fields, req) - .then(([memberWithDetails]) => memberWithDetails) - .catch((err) => { - req.log.error('Cannot get user details for member.'); - req.log.debug('Error during getting user details for member.', err); - // continues without details anyway - return member; - }) - )) - .then(member => res.json(member)) - .catch(next); + .then((data) => { + if (data.length === 0) { + req.log.debug('No project member found in ES'); + return models.ProjectMember.findOne({ + where: { + id: memberRecordId, + projectId }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }) + .then((member) => { + if (!member) { + // check there is an existing member + const err = new Error(`member not found for project id ${projectId}, id ${memberRecordId}`); + err.status = 404; + throw err; + } + return member; + }); + } + req.log.debug('project member found in ES'); + return _.pick( + data[0].inner_hits.members.hits.hits[0]._source, // eslint-disable-line no-underscore-dangle + // Elasticsearch index might have additional fields added to members like + // 'handle', 'firstName', 'lastName', 'email' + // but we shouldn't return them, as they might be outdated + // method "getObjectsWithMemberDetails" would populate these fields again + // with up to date data from Member Service if necessary + PROJECT_MEMBER_ATTRIBUTES, + ); + }).then(member => ( + util.getObjectsWithMemberDetails([member], fields, req) + .then(([memberWithDetails]) => memberWithDetails) + .catch((err) => { + req.log.error('Cannot get user details for member.'); + req.log.debug('Error during getting user details for member.', err); + // continues without details anyway + return member; + }) + )) + .then(member => res.json(member)) + .catch(next); }, ]; diff --git a/src/routes/projectMembers/get.spec.js b/src/routes/projectMembers/get.spec.js index 5956d027..ee72c1a4 100644 --- a/src/routes/projectMembers/get.spec.js +++ b/src/routes/projectMembers/get.spec.js @@ -48,33 +48,33 @@ describe('GET project member', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - // create members - models.ProjectMember.create({ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }).then((_member) => { - memberId = _member.id; + .then((project) => { + projectId = project.id; + // create members models.ProjectMember.create({ - id: 2, - userId: memberUser.userId, + id: 1, + userId: copilotUser.userId, projectId, - role: 'customer', - isPrimary: true, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - }).then((m) => { - memberId2 = m.id; - done(); + }).then((_member) => { + memberId = _member.id; + models.ProjectMember.create({ + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }).then((m) => { + memberId2 = m.id; + done(); + }); }); }); - }); }); }); @@ -91,20 +91,20 @@ describe('GET project member', () => { it('should return 404 if requested project doesn\'t exist', (done) => { request(server) - .get('/v5/projects/9999999/members/1') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, done); + .get('/v5/projects/9999999/members/1') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); }); it('should return 404 if requested project member doesn\'t exist', (done) => { request(server) - .get(`/v5/projects/${projectId}/members/9999`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, done); + .get(`/v5/projects/${projectId}/members/9999`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, done); }); it('should return 200 for connect admin', (done) => { diff --git a/src/routes/projectMembers/list.js b/src/routes/projectMembers/list.js index f3e3b340..9db7ef0a 100644 --- a/src/routes/projectMembers/list.js +++ b/src/routes/projectMembers/list.js @@ -16,11 +16,11 @@ const permissions = tcMiddleware.permissions; const schema = { query: { role: Joi.any() - .valid(PROJECT_MEMBER_ROLE.MANAGER, - PROJECT_MEMBER_ROLE.ACCOUNT_MANAGER, - PROJECT_MEMBER_ROLE.COPILOT, - PROJECT_MEMBER_ROLE.CUSTOMER, - PROJECT_MEMBER_ROLE.OBSERVER), + .valid(PROJECT_MEMBER_ROLE.MANAGER, + PROJECT_MEMBER_ROLE.ACCOUNT_MANAGER, + PROJECT_MEMBER_ROLE.COPILOT, + PROJECT_MEMBER_ROLE.CUSTOMER, + PROJECT_MEMBER_ROLE.OBSERVER), fields: Joi.string().optional(), }, params: { @@ -70,47 +70,47 @@ module.exports = [ }, }, }) - .then((data) => { - if (data.length === 0) { - req.log.debug('No project members found in ES'); + .then((data) => { + if (data.length === 0) { + req.log.debug('No project members found in ES'); // Get all project members - const where = { - projectId, - }; - if (req.query.role) { - where.role = req.query.role; - } - return models.ProjectMember.findAll({ - where, - // Add order - order: [ + const where = { + projectId, + }; + if (req.query.role) { + where.role = req.query.role; + } + return models.ProjectMember.findAll({ + where, + // Add order + order: [ ['id', 'ASC'], - ], - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }); - } - req.log.debug('project members found in ES'); - return data[0].inner_hits.members.hits.hits.map(hit => _.pick( - hit._source, // eslint-disable-line no-underscore-dangle - // Elasticsearch index might have additional fields added to members like - // 'handle', 'firstName', 'lastName', 'email' - // but we shouldn't return them, as they might be outdated - // method "getObjectsWithMemberDetails" would populate these fields again - // with up to date data from Member Service if necessary - PROJECT_MEMBER_ATTRIBUTES, - )); - }) - .then(members => ( - util.getObjectsWithMemberDetails(members, fields, req) - .catch((err) => { - req.log.error('Cannot get user details for member.'); - req.log.debug('Error during getting user details for member.', err); - // continues without details anyway - return members; - }) - )) - .then(members => res.json(members)) - .catch(next); + ], + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }); + } + req.log.debug('project members found in ES'); + return data[0].inner_hits.members.hits.hits.map(hit => _.pick( + hit._source, // eslint-disable-line no-underscore-dangle + // Elasticsearch index might have additional fields added to members like + // 'handle', 'firstName', 'lastName', 'email' + // but we shouldn't return them, as they might be outdated + // method "getObjectsWithMemberDetails" would populate these fields again + // with up to date data from Member Service if necessary + PROJECT_MEMBER_ATTRIBUTES, + )); + }) + .then(members => ( + util.getObjectsWithMemberDetails(members, fields, req) + .catch((err) => { + req.log.error('Cannot get user details for member.'); + req.log.debug('Error during getting user details for member.', err); + // continues without details anyway + return members; + }) + )) + .then(members => res.json(members)) + .catch(next); }, ]; diff --git a/src/routes/projectMembers/list.spec.js b/src/routes/projectMembers/list.spec.js index d9ef80d5..4db2595b 100644 --- a/src/routes/projectMembers/list.spec.js +++ b/src/routes/projectMembers/list.spec.js @@ -45,29 +45,29 @@ describe('LIST project members', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - id = project.id; - // create members - models.ProjectMember.create({ - id: 1, - userId: copilotUser.userId, - projectId: id, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }).then(() => { + .then((project) => { + id = project.id; + // create members models.ProjectMember.create({ - id: 2, - userId: memberUser.userId, + id: 1, + userId: copilotUser.userId, projectId: id, - role: 'customer', - isPrimary: true, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - }).then(() => done()); + }).then(() => { + models.ProjectMember.create({ + id: 2, + userId: memberUser.userId, + projectId: id, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }).then(() => done()); + }); }); - }); }); }); diff --git a/src/routes/projectMembers/update.js b/src/routes/projectMembers/update.js index fffe69f3..ddf318b1 100644 --- a/src/routes/projectMembers/update.js +++ b/src/routes/projectMembers/update.js @@ -37,7 +37,7 @@ module.exports = [ // handles request validations validate(updateProjectMemberValdiations), permissions('projectMember.edit'), - /** + /* * Update a projectMember if the user has access */ (req, res, next) => { @@ -53,104 +53,104 @@ module.exports = [ models.sequelize.transaction(() => models.ProjectMember.findOne({ where: { id: memberRecordId, projectId }, }) - .then((_member) => { - if (!_member) { - // handle 404 - const err = new Error(`project member not found for project id ${projectId} ` + + .then((_member) => { + if (!_member) { + // handle 404 + const err = new Error(`project member not found for project id ${projectId} ` + `and member id ${memberRecordId}`); - err.status = 404; - return Promise.reject(err); - } + err.status = 404; + return Promise.reject(err); + } - projectMember = _member; - previousValue = _.clone(projectMember.get({ plain: true })); - _.assign(projectMember, updatedProps); + projectMember = _member; + previousValue = _.clone(projectMember.get({ plain: true })); + _.assign(projectMember, updatedProps); - if ( - previousValue.userId !== req.authUser.userId && + if ( + previousValue.userId !== req.authUser.userId && previousValue.role !== PROJECT_MEMBER_ROLE.CUSTOMER && !util.hasPermissionByReq(PERMISSION.UPDATE_PROJECT_MEMBER_NON_CUSTOMER, req) - ) { - const err = new Error('You don\'t have permission to update a non-customer member.'); - err.status = 403; - return Promise.reject(err); - } + ) { + const err = new Error('You don\'t have permission to update a non-customer member.'); + err.status = 403; + return Promise.reject(err); + } - // no updates if no change - if (updatedProps.role === previousValue.role && + // no updates if no change + if (updatedProps.role === previousValue.role && (_.isUndefined(updatedProps.isPrimary) || updatedProps.isPrimary === previousValue.isPrimary)) { - return Promise.resolve(); - } + return Promise.resolve(); + } - return util.getUserRoles(projectMember.userId, req.log, req.id).then((roles) => { - if ( - previousValue.role !== updatedProps.role && + return util.getUserRoles(projectMember.userId, req.log, req.id).then((roles) => { + if ( + previousValue.role !== updatedProps.role && !util.matchPermissionRule( { topcoderRoles: PROJECT_TO_TOPCODER_ROLES_MATRIX[updatedProps.role] }, { roles }, ) - ) { - const err = new Error( - `User doesn't have required Topcoder roles to have project role "${updatedProps.role}".`, - ); - err.status = 401; - throw err; - } + ) { + const err = new Error( + `User doesn't have required Topcoder roles to have project role "${updatedProps.role}".`, + ); + err.status = 401; + throw err; + } - projectMember.updatedBy = req.authUser.userId; - const operations = []; - operations.push(projectMember.save()); + projectMember.updatedBy = req.authUser.userId; + const operations = []; + operations.push(projectMember.save()); - if (updatedProps.isPrimary) { - // if set as primary, other users with same role should no longer be primary - operations.push(models.ProjectMember.update({ isPrimary: false, - updatedBy: req.authUser.userId }, - { - where: { - projectId, - isPrimary: true, - role: updatedProps.role, - id: { - $ne: projectMember.id, - }, - }, - })); - } - return Promise.all(operations); - }); - }) - .then(() => projectMember.reload(projectMember.id)) - .then(() => { - projectMember = projectMember.get({ plain: true }); - projectMember = _.omit(projectMember, ['deletedAt']); - }) - .then(() => ( - util.getObjectsWithMemberDetails([projectMember], fields, req) - .then(([memberWithDetails]) => memberWithDetails) - .catch((err) => { - req.log.error('Cannot get user details for member.'); - req.log.debug('Error during getting user details for member.', err); - // continues without details anyway - return projectMember; - }) - )) - .then((memberWithDetails) => { - // emit original and updated project information - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_MEMBER_UPDATED, - { original: previousValue, updated: projectMember }, - { correlationId: req.id }, - ); - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_MEMBER_UPDATED, - RESOURCES.PROJECT_MEMBER, - projectMember, - previousValue); - req.log.debug('updated project member', projectMember); - res.json(memberWithDetails || projectMember); - }) - .catch(err => next(err))); + if (updatedProps.isPrimary) { + // if set as primary, other users with same role should no longer be primary + operations.push(models.ProjectMember.update({ isPrimary: false, + updatedBy: req.authUser.userId }, + { + where: { + projectId, + isPrimary: true, + role: updatedProps.role, + id: { + $ne: projectMember.id, + }, + }, + })); + } + return Promise.all(operations); + }); + }) + .then(() => projectMember.reload(projectMember.id)) + .then(() => { + projectMember = projectMember.get({ plain: true }); + projectMember = _.omit(projectMember, ['deletedAt']); + }) + .then(() => ( + util.getObjectsWithMemberDetails([projectMember], fields, req) + .then(([memberWithDetails]) => memberWithDetails) + .catch((err) => { + req.log.error('Cannot get user details for member.'); + req.log.debug('Error during getting user details for member.', err); + // continues without details anyway + return projectMember; + }) + )) + .then((memberWithDetails) => { + // emit original and updated project information + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_MEMBER_UPDATED, + { original: previousValue, updated: projectMember }, + { correlationId: req.id }, + ); + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_MEMBER_UPDATED, + RESOURCES.PROJECT_MEMBER, + projectMember, + previousValue); + req.log.debug('updated project member', projectMember); + res.json(memberWithDetails || projectMember); + }) + .catch(err => next(err))); }, ]; diff --git a/src/routes/projectMembers/update.spec.js b/src/routes/projectMembers/update.spec.js index 8874e3b0..44ce364d 100644 --- a/src/routes/projectMembers/update.spec.js +++ b/src/routes/projectMembers/update.spec.js @@ -506,42 +506,42 @@ describe('Project members update', () => { }); sandbox.stub(util, 'getHttpClient', () => mockHttpClient); request(server) - .patch(`/v5/projects/${project1.id}/members/${member2.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) - .send({ - role: 'customer', - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(2); + .patch(`/v5/projects/${project1.id}/members/${member2.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send({ + role: 'customer', + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(2); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_UPDATED, sinon.match({ - resource: RESOURCES.PROJECT_MEMBER, - id: member2.id, - role: 'customer', - userId: 40051332, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_MEMBER_UPDATED, sinon.match({ + resource: RESOURCES.PROJECT_MEMBER, + id: member2.id, + role: 'customer', + userId: 40051332, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051332, - initiatorUserId: testUtil.userIds.manager, - })).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_TEAM_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051332, + initiatorUserId: testUtil.userIds.manager, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); }); }); diff --git a/src/routes/projectReports/getEmbedReport.js b/src/routes/projectReports/getEmbedReport.js index e43dd7ce..3d265029 100644 --- a/src/routes/projectReports/getEmbedReport.js +++ b/src/routes/projectReports/getEmbedReport.js @@ -53,17 +53,17 @@ module.exports = [ // if no project template found, try to find product template (for old project v2) } else { const productTemplate = _.get(project, 'details.products[0]') - ? await models.ProductTemplate.findOne( - { - where: { - productKey: _.get(project, 'details.products[0]'), + ? await models.ProductTemplate.findOne( + { + where: { + productKey: _.get(project, 'details.products[0]'), + }, }, - }, - { - attributes: ['category'], - raw: true, - }, - ) : null; + { + attributes: ['category'], + raw: true, + }, + ) : null; category = _.get(productTemplate, 'category', ''); } diff --git a/src/routes/projectReports/getReport.spec.js b/src/routes/projectReports/getReport.spec.js index 9bdf5d3c..0bb426fd 100644 --- a/src/routes/projectReports/getReport.spec.js +++ b/src/routes/projectReports/getReport.spec.js @@ -56,7 +56,7 @@ describe('GET report', () => { }).then(() => { done(); }), - ), + ), ); }); }); diff --git a/src/routes/projectSettings/create.js b/src/routes/projectSettings/create.js index 6623a723..e42de99d 100644 --- a/src/routes/projectSettings/create.js +++ b/src/routes/projectSettings/create.js @@ -79,7 +79,7 @@ module.exports = [ return Promise.resolve(); }), - ) // transaction end + ) // transaction end .then(() => { req.log.debug('new project setting created (id# %d, key: %s)', setting.id, setting.key); diff --git a/src/routes/projectSettings/create.spec.js b/src/routes/projectSettings/create.spec.js index 152ee7fa..f75812e9 100644 --- a/src/routes/projectSettings/create.spec.js +++ b/src/routes/projectSettings/create.spec.js @@ -117,15 +117,15 @@ describe('CREATE Project Setting', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - - models.ProjectEstimation.create(_.assign(estimation, { projectId })) - .then((e) => { - estimationId = e.id; - done(); + .then((project) => { + projectId = project.id; + + models.ProjectEstimation.create(_.assign(estimation, { projectId })) + .then((e) => { + estimationId = e.id; + done(); + }); }); - }); }); }); @@ -293,34 +293,34 @@ describe('CREATE Project Setting', () => { it('should return 201 for manager, calculating project estimation items', (done) => { request(server) - .post(`/v5/projects/${projectId}/settings`) - .set({ - Authorization: `Bearer ${testUtil.jwts.manager}`, - }) - .send(body) - .expect('Content-Type', /json/) - .expect(201) - .end((err, res) => { - if (err) done(err); + .post(`/v5/projects/${projectId}/settings`) + .set({ + Authorization: `Bearer ${testUtil.jwts.manager}`, + }) + .send(body) + .expect('Content-Type', /json/) + .expect(201) + .end((err, res) => { + if (err) done(err); - const resJson = res.body; - resJson.key.should.be.eql(body.key); - resJson.value.should.be.eql(body.value); - resJson.valueType.should.be.eql(body.valueType); - resJson.projectId.should.be.eql(projectId); - resJson.createdBy.should.be.eql(40051334); - should.exist(resJson.createdAt); - resJson.updatedBy.should.be.eql(40051334); - should.exist(resJson.updatedAt); - should.not.exist(resJson.deletedBy); - should.not.exist(resJson.deletedAt); - expectAfterCreate(resJson.id, projectId, _.assign(estimation, { - id: estimationId, - value: body.value, - valueType: body.valueType, - key: body.key, - }), 1, 0, err, done); - }); + const resJson = res.body; + resJson.key.should.be.eql(body.key); + resJson.value.should.be.eql(body.value); + resJson.valueType.should.be.eql(body.valueType); + resJson.projectId.should.be.eql(projectId); + resJson.createdBy.should.be.eql(40051334); + should.exist(resJson.createdAt); + resJson.updatedBy.should.be.eql(40051334); + should.exist(resJson.updatedAt); + should.not.exist(resJson.deletedBy); + should.not.exist(resJson.deletedAt); + expectAfterCreate(resJson.id, projectId, _.assign(estimation, { + id: estimationId, + value: body.value, + valueType: body.valueType, + key: body.key, + }), 1, 0, err, done); + }); }); it('should return 201 for admin', (done) => { diff --git a/src/routes/projectSettings/delete.js b/src/routes/projectSettings/delete.js index aa85f493..b625fcef 100644 --- a/src/routes/projectSettings/delete.js +++ b/src/routes/projectSettings/delete.js @@ -32,32 +32,32 @@ module.exports = [ projectId, }, }) - .then((entity) => { + .then((entity) => { // Not found - if (!entity) { - const apiErr = new Error(`Project setting not found for id ${id} and project id ${projectId}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!entity) { + const apiErr = new Error(`Project setting not found for id ${id} and project id ${projectId}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - deletedEntity = entity; - // Update the deletedBy, then delete - return entity.update({ deletedBy: req.authUser.userId }); - }) - .then(entity => entity.destroy()) - .then(() => { + deletedEntity = entity; + // Update the deletedBy, then delete + return entity.update({ deletedBy: req.authUser.userId }); + }) + .then(entity => entity.destroy()) + .then(() => { // Calculate for valid estimation type - if (util.isProjectSettingForEstimation(deletedEntity.key)) { - req.log.debug(`Recalculate price breakdown for project id ${projectId}`); - return util.calculateProjectEstimationItems(req, projectId); - } + if (util.isProjectSettingForEstimation(deletedEntity.key)) { + req.log.debug(`Recalculate price breakdown for project id ${projectId}`); + return util.calculateProjectEstimationItems(req, projectId); + } - return Promise.resolve(); - }), + return Promise.resolve(); + }), ) // transaction end - .then(() => { - res.status(204).end(); - }) - .catch(next); + .then(() => { + res.status(204).end(); + }) + .catch(next); }, ]; diff --git a/src/routes/projectSettings/delete.spec.js b/src/routes/projectSettings/delete.spec.js index 78d1e514..3bce216f 100644 --- a/src/routes/projectSettings/delete.spec.js +++ b/src/routes/projectSettings/delete.spec.js @@ -22,39 +22,39 @@ const expectAfterDelete = (id, projectId, len, deletedLen, err, next) => { }, paranoid: false, }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - should.exist(res.deletedBy); - should.exist(res.deletedAt); + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + should.exist(res.deletedBy); + should.exist(res.deletedAt); - // find deleted ProjectEstimationItems for project - models.ProjectEstimationItem.findAllByProject(models, projectId, { - where: { - deletedAt: { $ne: null }, - }, - includeAllProjectEstimatinoItemsForInternalUsage: true, - paranoid: false, - }).then((items) => { + // find deleted ProjectEstimationItems for project + models.ProjectEstimationItem.findAllByProject(models, projectId, { + where: { + deletedAt: { $ne: null }, + }, + includeAllProjectEstimatinoItemsForInternalUsage: true, + paranoid: false, + }).then((items) => { // deleted project estimation items - items.should.have.lengthOf(deletedLen, 'Number of deleted ProjectEstimationItems doesn\'t match'); - _.each(items, (item) => { - should.exist(item.deletedBy); - should.exist(item.deletedAt); - }); + items.should.have.lengthOf(deletedLen, 'Number of deleted ProjectEstimationItems doesn\'t match'); + _.each(items, (item) => { + should.exist(item.deletedBy); + should.exist(item.deletedAt); + }); - // find (non-deleted) ProjectEstimationItems for project - return models.ProjectEstimationItem.findAllByProject(models, projectId, { - includeAllProjectEstimatinoItemsForInternalUsage: true, - }); - }).then((items) => { + // find (non-deleted) ProjectEstimationItems for project + return models.ProjectEstimationItem.findAllByProject(models, projectId, { + includeAllProjectEstimatinoItemsForInternalUsage: true, + }); + }).then((items) => { // all non-deleted project estimation item count - items.should.have.lengthOf(len, 'Number of created ProjectEstimationItems doesn\'t match'); - next(); - }).catch(next); - } - }); + items.should.have.lengthOf(len, 'Number of created ProjectEstimationItems doesn\'t match'); + next(); + }).catch(next); + } + }); }; describe('DELETE Project Setting', () => { @@ -93,54 +93,54 @@ describe('DELETE Project Setting', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; + .then((project) => { + projectId = project.id; - models.ProjectSetting.bulkCreate([{ - projectId, - key: 'markup_topcoder_service', - value: '5599.96', - valueType: 'double', - readPermission: { - projectRoles: ['customer'], - topcoderRoles: ['administrator'], - }, - writePermission: { - allowRule: { - projectRoles: ['customer', 'copilot'], + models.ProjectSetting.bulkCreate([{ + projectId, + key: 'markup_topcoder_service', + value: '5599.96', + valueType: 'double', + readPermission: { + projectRoles: ['customer'], topcoderRoles: ['administrator'], }, - denyRule: { - projectRoles: ['copilot'], + writePermission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['administrator'], + }, + denyRule: { + projectRoles: ['copilot'], + }, }, - }, - createdBy: 1, - updatedBy: 1, - }, { - projectId, - key: 'markup_no_estimation', - value: '40', - valueType: 'percentage', - readPermission: { - topcoderRoles: ['administrator'], - }, - writePermission: { - allowRule: { topcoderRoles: ['administrator'] }, - denyRule: { projectRoles: ['copilot'] }, - }, - createdBy: 1, - updatedBy: 1, - }], { returning: true }) - .then((settings) => { - id = settings[0].id; - id2 = settings[1].id; - models.ProjectEstimation.create(_.assign(estimation, { projectId })) - .then((e) => { - estimationId = e.id; - done(); - }); + createdBy: 1, + updatedBy: 1, + }, { + projectId, + key: 'markup_no_estimation', + value: '40', + valueType: 'percentage', + readPermission: { + topcoderRoles: ['administrator'], + }, + writePermission: { + allowRule: { topcoderRoles: ['administrator'] }, + denyRule: { projectRoles: ['copilot'] }, + }, + createdBy: 1, + updatedBy: 1, + }], { returning: true }) + .then((settings) => { + id = settings[0].id; + id2 = settings[1].id; + models.ProjectEstimation.create(_.assign(estimation, { projectId })) + .then((e) => { + estimationId = e.id; + done(); + }); + }); }); - }); }); }); @@ -213,69 +213,69 @@ describe('DELETE Project Setting', () => { createdBy: 1, updatedBy: 1, }) - .then(() => { + .then(() => { + request(server) + .delete(`/v5/projects/${projectId}/settings/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(204) + .end(err => expectAfterDelete(id, projectId, 0, 1, err, done)); + }).catch(done); + }); + + it('should return 204, for admin, if project setting with non-estimation type was successfully removed', + (done) => { request(server) - .delete(`/v5/projects/${projectId}/settings/${id}`) + .delete(`/v5/projects/${projectId}/settings/${id2}`) .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) .expect(204) - .end(err => expectAfterDelete(id, projectId, 0, 1, err, done)); - }).catch(done); - }); - - it('should return 204, for admin, if project setting with non-estimation type was successfully removed', - (done) => { - request(server) - .delete(`/v5/projects/${projectId}/settings/${id2}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(204) - .end(err => expectAfterDelete(id2, projectId, 0, 0, err, done)); - }); + .end(err => expectAfterDelete(id2, projectId, 0, 0, err, done)); + }); it('should return 204, for admin, another project setting exists if the project setting was successfully removed', - (done) => { - models.ProjectSetting.create({ - projectId, - key: 'markup_fee', - value: '25', - valueType: 'percentage', - readPermission: { - projectRoles: ['customer'], - topcoderRoles: ['administrator'], - }, - writePermission: { - allowRule: { - projectRoles: ['customer', 'copilot'], + (done) => { + models.ProjectSetting.create({ + projectId, + key: 'markup_fee', + value: '25', + valueType: 'percentage', + readPermission: { + projectRoles: ['customer'], topcoderRoles: ['administrator'], }, - denyRule: { - projectRoles: ['copilot'], + writePermission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['administrator'], + }, + denyRule: { + projectRoles: ['copilot'], + }, }, - }, - createdBy: 1, - updatedBy: 1, - }).then((anotherSetting) => { - models.ProjectEstimationItem.create({ - projectEstimationId: estimationId, - price: 1200, - type: 'fee', - markupUsedReference: 'projectSetting', - markupUsedReferenceId: anotherSetting.id, createdBy: 1, updatedBy: 1, - }).then(() => { - request(server) - .delete(`/v5/projects/${projectId}/settings/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(204) - .end(err => expectAfterDelete(id, projectId, 1, 1, err, done)); - }); - }).catch(done); - }); + }).then((anotherSetting) => { + models.ProjectEstimationItem.create({ + projectEstimationId: estimationId, + price: 1200, + type: 'fee', + markupUsedReference: 'projectSetting', + markupUsedReferenceId: anotherSetting.id, + createdBy: 1, + updatedBy: 1, + }).then(() => { + request(server) + .delete(`/v5/projects/${projectId}/settings/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(204) + .end(err => expectAfterDelete(id, projectId, 1, 1, err, done)); + }); + }).catch(done); + }); }); }); diff --git a/src/routes/projectSettings/list.spec.js b/src/routes/projectSettings/list.spec.js index f5e0b597..6248aaae 100644 --- a/src/routes/projectSettings/list.spec.js +++ b/src/routes/projectSettings/list.spec.js @@ -79,30 +79,30 @@ describe('LIST Project Settings', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]) - .then(() => { - models.ProjectSetting.bulkCreate(_.map(settings, s => _.assign(s, { projectId }))).then(() => done()); + .then((project) => { + projectId = project.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]) + .then(() => { + models.ProjectSetting.bulkCreate(_.map(settings, s => _.assign(s, { projectId }))).then(() => done()); + }); }); - }); }); }); diff --git a/src/routes/projectSettings/update.js b/src/routes/projectSettings/update.js index 9f22b1d9..8029776a 100644 --- a/src/routes/projectSettings/update.js +++ b/src/routes/projectSettings/update.js @@ -46,29 +46,29 @@ module.exports = [ projectId, }, }) - .then((existing) => { + .then((existing) => { // Not found - if (!existing) { - const apiErr = new Error(`Project setting not found for id ${id} and project id ${projectId}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!existing) { + const apiErr = new Error(`Project setting not found for id ${id} and project id ${projectId}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - oldKey = existing.key; - return existing.update(entityToUpdate); - }) - .then((updated) => { - updatedSetting = updated; - if (util.isProjectSettingForEstimation(updatedSetting.key) || util.isProjectSettingForEstimation(oldKey)) { - req.log.debug(`Recalculate price breakdown for project id ${projectId}`); - return util.calculateProjectEstimationItems(req, projectId); - } - return Promise.resolve(); - }), + oldKey = existing.key; + return existing.update(entityToUpdate); + }) + .then((updated) => { + updatedSetting = updated; + if (util.isProjectSettingForEstimation(updatedSetting.key) || util.isProjectSettingForEstimation(oldKey)) { + req.log.debug(`Recalculate price breakdown for project id ${projectId}`); + return util.calculateProjectEstimationItems(req, projectId); + } + return Promise.resolve(); + }), ) // transaction end - .then(() => { - res.json(updatedSetting); - }) - .catch(next); + .then(() => { + res.json(updatedSetting); + }) + .catch(next); }, ]; diff --git a/src/routes/projectSettings/update.spec.js b/src/routes/projectSettings/update.spec.js index 916757f2..1fbd4779 100644 --- a/src/routes/projectSettings/update.spec.js +++ b/src/routes/projectSettings/update.spec.js @@ -22,51 +22,51 @@ const expectAfterUpdate = (id, projectId, estimation, len, deletedLen, err, next projectId, }, }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { // find deleted ProjectEstimationItems for project - models.ProjectEstimationItem.findAllByProject(models, projectId, { - where: { - deletedAt: { $ne: null }, - }, - includeAllProjectEstimatinoItemsForInternalUsage: true, - paranoid: false, - }).then((items) => { + models.ProjectEstimationItem.findAllByProject(models, projectId, { + where: { + deletedAt: { $ne: null }, + }, + includeAllProjectEstimatinoItemsForInternalUsage: true, + paranoid: false, + }).then((items) => { // deleted project estimation items - items.should.have.lengthOf(deletedLen, 'Number of deleted ProjectEstimationItems doesn\'t match'); + items.should.have.lengthOf(deletedLen, 'Number of deleted ProjectEstimationItems doesn\'t match'); - _.each(items, (item) => { - should.exist(item.deletedBy); - should.exist(item.deletedAt); - }); + _.each(items, (item) => { + should.exist(item.deletedBy); + should.exist(item.deletedAt); + }); - // find (non-deleted) ProjectEstimationItems for project - return models.ProjectEstimationItem.findAllByProject(models, projectId, { - includeAllProjectEstimatinoItemsForInternalUsage: true, - }); - }).then((entities) => { - entities.should.have.lengthOf(len, 'Number of created ProjectEstimationItems doesn\'t match'); - if (len) { - entities[0].projectEstimationId.should.be.eql(estimation.id); - if (estimation.valueType === VALUE_TYPE.PERCENTAGE) { - entities[0].price.should.be.eql((estimation.price * estimation.value) / 100); - } else { - entities[0].price.should.be.eql(Number(estimation.value)); + // find (non-deleted) ProjectEstimationItems for project + return models.ProjectEstimationItem.findAllByProject(models, projectId, { + includeAllProjectEstimatinoItemsForInternalUsage: true, + }); + }).then((entities) => { + entities.should.have.lengthOf(len, 'Number of created ProjectEstimationItems doesn\'t match'); + if (len) { + entities[0].projectEstimationId.should.be.eql(estimation.id); + if (estimation.valueType === VALUE_TYPE.PERCENTAGE) { + entities[0].price.should.be.eql((estimation.price * estimation.value) / 100); + } else { + entities[0].price.should.be.eql(Number(estimation.value)); + } + entities[0].type.should.be.eql(estimation.key.split('markup_')[1]); + entities[0].markupUsedReference.should.be.eql('projectSetting'); + entities[0].markupUsedReferenceId.should.be.eql(id); + should.exist(entities[0].updatedAt); + should.not.exist(entities[0].deletedBy); + should.not.exist(entities[0].deletedAt); } - entities[0].type.should.be.eql(estimation.key.split('markup_')[1]); - entities[0].markupUsedReference.should.be.eql('projectSetting'); - entities[0].markupUsedReferenceId.should.be.eql(id); - should.exist(entities[0].updatedAt); - should.not.exist(entities[0].deletedBy); - should.not.exist(entities[0].deletedAt); - } - - next(); - }); - } - }); + + next(); + }); + } + }); }; describe('UPDATE Project Setting', () => { @@ -146,41 +146,41 @@ describe('UPDATE Project Setting', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]) - .then(() => { - models.ProjectSetting.create(_.assign({}, body, bodyNonMutable, { + .then((project) => { + projectId = project.id; + + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, projectId, - })) - .then((s) => { - id = s.id; - - models.ProjectEstimation.create(_.assign(estimation, { projectId })) - .then((e) => { - estimationId = e.id; - done(); + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]) + .then(() => { + models.ProjectSetting.create(_.assign({}, body, bodyNonMutable, { + projectId, + })) + .then((s) => { + id = s.id; + + models.ProjectEstimation.create(_.assign(estimation, { projectId })) + .then((e) => { + estimationId = e.id; + done(); + }); + }).catch(done); }); - }).catch(done); }); - }); }); }); @@ -272,55 +272,55 @@ describe('UPDATE Project Setting', () => { }); it('should return 200, for member with permission (team member), value updated but no project estimation present', - (done) => { - const notPresent = _.cloneDeep(body); - notPresent.value = '4500'; - - models.ProjectEstimation.destroy({ - where: { - id: estimationId, - }, - }).then(() => { - models.ProjectEstimationItem.destroy({ + (done) => { + const notPresent = _.cloneDeep(body); + notPresent.value = '4500'; + + models.ProjectEstimation.destroy({ where: { - markupUsedReference: 'projectSetting', - markupUsedReferenceId: id, + id: estimationId, }, }).then(() => { - request(server) - .patch(`/v5/projects/${projectId}/settings/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .send({ - value: notPresent.value, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) done(err); - - const resJson = res.body; - resJson.id.should.be.eql(id); - resJson.key.should.be.eql(bodyNonMutable.key); - resJson.value.should.be.eql(notPresent.value); - resJson.valueType.should.be.eql(notPresent.valueType); - resJson.projectId.should.be.eql(projectId); - resJson.createdBy.should.be.eql(bodyNonMutable.createdBy); - resJson.updatedBy.should.be.eql(40051331); - should.exist(resJson.updatedAt); - should.not.exist(resJson.deletedBy); - should.not.exist(resJson.deletedAt); - expectAfterUpdate(id, projectId, _.assign(estimation, { - id: estimationId, + models.ProjectEstimationItem.destroy({ + where: { + markupUsedReference: 'projectSetting', + markupUsedReferenceId: id, + }, + }).then(() => { + request(server) + .patch(`/v5/projects/${projectId}/settings/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .send({ value: notPresent.value, - valueType: notPresent.valueType, - key: bodyNonMutable.key, - }), 0, 0, err, done); - }); - }); - }).catch(done); - }); + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) done(err); + + const resJson = res.body; + resJson.id.should.be.eql(id); + resJson.key.should.be.eql(bodyNonMutable.key); + resJson.value.should.be.eql(notPresent.value); + resJson.valueType.should.be.eql(notPresent.valueType); + resJson.projectId.should.be.eql(projectId); + resJson.createdBy.should.be.eql(bodyNonMutable.createdBy); + resJson.updatedBy.should.be.eql(40051331); + should.exist(resJson.updatedAt); + should.not.exist(resJson.deletedBy); + should.not.exist(resJson.deletedAt); + expectAfterUpdate(id, projectId, _.assign(estimation, { + id: estimationId, + value: notPresent.value, + valueType: notPresent.valueType, + key: bodyNonMutable.key, + }), 0, 0, err, done); + }); + }); + }).catch(done); + }); it('should return 200 for admin when value updated, calculating project estimation items', (done) => { body.value = '4500'; diff --git a/src/routes/projectTemplates/create.js b/src/routes/projectTemplates/create.js index 473139f7..90ebf8b3 100644 --- a/src/routes/projectTemplates/create.js +++ b/src/routes/projectTemplates/create.js @@ -47,10 +47,10 @@ const schema = { updatedBy: Joi.any().strip(), deletedBy: Joi.any().strip(), }) - .xor('form', 'scope') - .xor('phases', 'planConfig') - .nand('priceConfig', 'scope') - .required(), + .xor('form', 'scope') + .xor('phases', 'planConfig') + .nand('priceConfig', 'scope') + .required(), }; module.exports = [ diff --git a/src/routes/projectTemplates/delete.js b/src/routes/projectTemplates/delete.js index aaf8055d..2530d429 100644 --- a/src/routes/projectTemplates/delete.js +++ b/src/routes/projectTemplates/delete.js @@ -33,17 +33,17 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(entity => entity.destroy())) - .then((entity) => { - // emit event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PROJECT_TEMPLATE, - _.pick(entity.toJSON(), 'id'), - ); + .then((entity) => { + // emit event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PROJECT_TEMPLATE, + _.pick(entity.toJSON(), 'id'), + ); - res.status(204).end(); - }) - .catch(next); + res.status(204).end(); + }) + .catch(next); }, ]; diff --git a/src/routes/projectTemplates/delete.spec.js b/src/routes/projectTemplates/delete.spec.js index 580f8504..d283efcd 100644 --- a/src/routes/projectTemplates/delete.spec.js +++ b/src/routes/projectTemplates/delete.spec.js @@ -11,27 +11,27 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (id, err, next) => { if (err) throw err; setTimeout(() => - models.ProjectTemplate.findOne({ - where: { - id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.ProjectTemplate.findOne({ + where: { + id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/metadata/projectTemplates/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/metadata/projectTemplates/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; describe('DELETE project template', () => { diff --git a/src/routes/projectTemplates/get.js b/src/routes/projectTemplates/get.js index db464bda..afeb733e 100644 --- a/src/routes/projectTemplates/get.js +++ b/src/routes/projectTemplates/get.js @@ -30,34 +30,34 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No projectTemplate found in ES'); - models.ProjectTemplate.findOne({ - where: { - deletedAt: { $eq: null }, - id: req.params.templateId, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then((projectTemplate) => { - // Not found - if (!projectTemplate) { - const apiErr = new Error(`Project template not found for project id ${req.params.templateId}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + .then((data) => { + if (data.length === 0) { + req.log.debug('No projectTemplate found in ES'); + models.ProjectTemplate.findOne({ + where: { + deletedAt: { $eq: null }, + id: req.params.templateId, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }) + .then((projectTemplate) => { + // Not found + if (!projectTemplate) { + const apiErr = new Error(`Project template not found for project id ${req.params.templateId}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(projectTemplate); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('projectTemplate found in ES'); - res.json(data[0].inner_hits.projectTemplates.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(projectTemplate); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('projectTemplate found in ES'); + res.json(data[0].inner_hits.projectTemplates.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/projectTemplates/list.js b/src/routes/projectTemplates/list.js index ce239861..641a750f 100644 --- a/src/routes/projectTemplates/list.js +++ b/src/routes/projectTemplates/list.js @@ -21,24 +21,24 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.projectTemplates.length === 0) { - req.log.debug('No projectTemplates found in ES'); - models.ProjectTemplate.findAll({ - where: { - deletedAt: { $eq: null }, - disabled: false, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }).then((projectTemplates) => { - res.json(projectTemplates); - }) - .catch(next); - } else { - req.log.debug('projectTemplates found in ES'); - res.json(data.projectTemplates); - } - }); + .then((data) => { + if (data.projectTemplates.length === 0) { + req.log.debug('No projectTemplates found in ES'); + models.ProjectTemplate.findAll({ + where: { + deletedAt: { $eq: null }, + disabled: false, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }).then((projectTemplates) => { + res.json(projectTemplates); + }) + .catch(next); + } else { + req.log.debug('projectTemplates found in ES'); + res.json(data.projectTemplates); + } + }); }, ]; diff --git a/src/routes/projectTemplates/update.js b/src/routes/projectTemplates/update.js index 6661a520..85fa47fb 100644 --- a/src/routes/projectTemplates/update.js +++ b/src/routes/projectTemplates/update.js @@ -50,10 +50,10 @@ const schema = { updatedBy: Joi.any().strip(), deletedBy: Joi.any().strip(), }) - .xor('form', 'scope') - .xor('phases', 'planConfig') - .nand('priceConfig', 'scope') - .required(), + .xor('form', 'scope') + .xor('phases', 'planConfig') + .nand('priceConfig', 'scope') + .required(), }; module.exports = [ @@ -69,19 +69,19 @@ module.exports = [ util.checkModel(priceConfig, 'PriceConfig', models.PriceConfig, 'project template'), util.checkModel(planConfig, 'PlanConfig', models.PlanConfig, 'project template'), ]) - .then(() => { - const entityToUpdate = _.assign(req.body, { - updatedBy: req.authUser.userId, - }); + .then(() => { + const entityToUpdate = _.assign(req.body, { + updatedBy: req.authUser.userId, + }); - return models.ProjectTemplate.findOne({ - where: { - deletedAt: { $eq: null }, - id: req.params.templateId, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, + return models.ProjectTemplate.findOne({ + where: { + deletedAt: { $eq: null }, + id: req.params.templateId, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) + }) .then((projectTemplate) => { // Not found if (!projectTemplate) { @@ -112,6 +112,6 @@ module.exports = [ res.json(projectTemplate); }); - }).catch(next); + }).catch(next); }, ]; diff --git a/src/routes/projectTemplates/update.spec.js b/src/routes/projectTemplates/update.spec.js index 85757148..05392281 100644 --- a/src/routes/projectTemplates/update.spec.js +++ b/src/routes/projectTemplates/update.spec.js @@ -54,63 +54,63 @@ describe('UPDATE project template', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => models.ProjectType.bulkCreate([ - { - key: 'generic', - displayName: 'Generic', - icon: 'http://example.com/icon1.ico', - question: 'question 1', - info: 'info 1', - aliases: ['key-1', 'key_1'], - metadata: {}, + .then(() => models.ProjectType.bulkCreate([ + { + key: 'generic', + displayName: 'Generic', + icon: 'http://example.com/icon1.ico', + question: 'question 1', + info: 'info 1', + aliases: ['key-1', 'key_1'], + metadata: {}, + createdBy: 1, + updatedBy: 1, + }, + { + key: 'concrete', + displayName: 'Concrete', + icon: 'http://example.com/icon1.ico', + question: 'question 2', + info: 'info 2', + aliases: ['key-2', 'key_2'], + metadata: {}, + createdBy: 1, + updatedBy: 1, + }, + ])) + .then(() => models.ProjectTemplate.create(template).then((createdTemplate) => { + templateId = createdTemplate.id; + })) + .then(() => models.Form.create({ + key: 'test', + config: { + test: 'test1', + }, + version: 1, + revision: 1, createdBy: 1, updatedBy: 1, - }, - { - key: 'concrete', - displayName: 'Concrete', - icon: 'http://example.com/icon1.ico', - question: 'question 2', - info: 'info 2', - aliases: ['key-2', 'key_2'], - metadata: {}, + })) + .then(() => models.PlanConfig.create({ + key: 'test', + config: { + test: 'test1', + }, + version: 1, + revision: 1, createdBy: 1, updatedBy: 1, - }, - ])) - .then(() => models.ProjectTemplate.create(template).then((createdTemplate) => { - templateId = createdTemplate.id; - })) - .then(() => models.Form.create({ - key: 'test', - config: { - test: 'test1', - }, - version: 1, - revision: 1, - createdBy: 1, - updatedBy: 1, - })) - .then(() => models.PlanConfig.create({ - key: 'test', - config: { - test: 'test1', - }, - version: 1, - revision: 1, - createdBy: 1, - updatedBy: 1, - })) - .then(() => models.PriceConfig.create({ - key: 'test', - config: { - test: 'test1', - }, - version: 1, - revision: 1, - createdBy: 1, - updatedBy: 1, - }).then(() => done())); + })) + .then(() => models.PriceConfig.create({ + key: 'test', + config: { + test: 'test1', + }, + version: 1, + revision: 1, + createdBy: 1, + updatedBy: 1, + }).then(() => done())); }); after((done) => { testUtil.clearDb(done); diff --git a/src/routes/projectTemplates/upgrade.js b/src/routes/projectTemplates/upgrade.js index 4c064d26..c338ed43 100644 --- a/src/routes/projectTemplates/upgrade.js +++ b/src/routes/projectTemplates/upgrade.js @@ -118,6 +118,6 @@ module.exports = [ res.status(201).json(_.omit(newPt.toJSON(), 'deletedAt', 'deletedBy')); }) - .catch(next)); + .catch(next)); }, ]; diff --git a/src/routes/projectTemplates/upgrade.spec.js b/src/routes/projectTemplates/upgrade.spec.js index 28341e8b..4735abe7 100644 --- a/src/routes/projectTemplates/upgrade.spec.js +++ b/src/routes/projectTemplates/upgrade.spec.js @@ -182,10 +182,10 @@ describe('Upgrade project template', () => { it('should return 404 for non-existed template', (done) => { request(server) - .post('/v5/projects/metadata/projectTemplates/123/upgrade') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post('/v5/projects/metadata/projectTemplates/123/upgrade') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect(404, done); }); @@ -194,10 +194,10 @@ describe('Upgrade project template', () => { models.ProjectTemplate.destroy({ where: { id: templateId } }) .then(() => { request(server) - .post(`/v5/projects/metadata/projectTemplates/${templateId}/upgrade`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post(`/v5/projects/metadata/projectTemplates/${templateId}/upgrade`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect(404, done); }); @@ -205,10 +205,10 @@ describe('Upgrade project template', () => { it('should return 200 for admin', (done) => { request(server) - .post(`/v5/projects/metadata/projectTemplates/${templateId}/upgrade`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) + .post(`/v5/projects/metadata/projectTemplates/${templateId}/upgrade`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) .send(body) .expect(200) .end((err, res) => { diff --git a/src/routes/projectTypes/delete.js b/src/routes/projectTypes/delete.js index 35aeb9fd..c199d998 100644 --- a/src/routes/projectTypes/delete.js +++ b/src/routes/projectTypes/delete.js @@ -21,7 +21,7 @@ module.exports = [ validate(schema), permissions('projectType.delete'), (req, res, next) => - models.sequelize.transaction(() => + models.sequelize.transaction(() => models.ProjectType.findByPk(req.params.key) .then((entity) => { if (!entity) { @@ -33,13 +33,13 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(entity => entity.destroy())) - .then((entity) => { - // emit event - util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, - RESOURCES.PROJECT_TYPE, - _.pick(entity.toJSON(), 'key')); - res.status(204).end(); - }) - .catch(next), + .then((entity) => { + // emit event + util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.PROJECT_METADATA_DELETE, + RESOURCES.PROJECT_TYPE, + _.pick(entity.toJSON(), 'key')); + res.status(204).end(); + }) + .catch(next), ]; diff --git a/src/routes/projectTypes/delete.spec.js b/src/routes/projectTypes/delete.spec.js index 749dc139..79773117 100644 --- a/src/routes/projectTypes/delete.spec.js +++ b/src/routes/projectTypes/delete.spec.js @@ -10,27 +10,27 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (key, err, next) => { if (err) throw err; setTimeout(() => - models.ProjectType.findOne({ - where: { - key, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.ProjectType.findOne({ + where: { + key, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/metadata/projectTypes/${key}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/metadata/projectTypes/${key}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; describe('DELETE project type', () => { diff --git a/src/routes/projectTypes/get.js b/src/routes/projectTypes/get.js index c203d8f4..e1d682c0 100644 --- a/src/routes/projectTypes/get.js +++ b/src/routes/projectTypes/get.js @@ -30,33 +30,33 @@ module.exports = [ }, }, }, 'metadata') - .then((data) => { - if (data.length === 0) { - req.log.debug('No projectType found in ES'); - models.ProjectType.findOne({ - where: { - key: req.params.key, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - }) - .then((projectType) => { + .then((data) => { + if (data.length === 0) { + req.log.debug('No projectType found in ES'); + models.ProjectType.findOne({ + where: { + key: req.params.key, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + }) + .then((projectType) => { // Not found - if (!projectType) { - const apiErr = new Error(`Project type not found for key ${req.params.key}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!projectType) { + const apiErr = new Error(`Project type not found for key ${req.params.key}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - res.json(projectType); - return Promise.resolve(); - }) - .catch(next); - } else { - req.log.debug('projectTypes found in ES'); - res.json(data[0].inner_hits.projectTypes.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle - } - }) - .catch(next); + res.json(projectType); + return Promise.resolve(); + }) + .catch(next); + } else { + req.log.debug('projectTypes found in ES'); + res.json(data[0].inner_hits.projectTypes.hits.hits[0]._source); // eslint-disable-line no-underscore-dangle + } + }) + .catch(next); }, ]; diff --git a/src/routes/projectTypes/list.js b/src/routes/projectTypes/list.js index f71f11bd..a197d675 100644 --- a/src/routes/projectTypes/list.js +++ b/src/routes/projectTypes/list.js @@ -11,22 +11,22 @@ module.exports = [ permissions('projectType.view'), (req, res, next) => { util.fetchFromES('projectTypes') - .then((data) => { - if (data.projectTypes.length === 0) { - req.log.debug('No projectType found in ES'); - models.ProjectType.findAll({ - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }) - .then((projectTypes) => { - res.json(projectTypes); + .then((data) => { + if (data.projectTypes.length === 0) { + req.log.debug('No projectType found in ES'); + models.ProjectType.findAll({ + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, }) - .catch(next); - } else { - req.log.debug('projectTypes found in ES'); - res.json(data.projectTypes); - } - }); + .then((projectTypes) => { + res.json(projectTypes); + }) + .catch(next); + } else { + req.log.debug('projectTypes found in ES'); + res.json(data.projectTypes); + } + }); }, ]; diff --git a/src/routes/projects/create.js b/src/routes/projects/create.js index 716de4d7..55e57ab3 100644 --- a/src/routes/projects/create.js +++ b/src/routes/projects/create.js @@ -44,7 +44,7 @@ const createProjectValidations = { updatedBy: Joi.number().integer().positive(), })).optional().allow(null), estimatedPrice: Joi.number().precision(2).positive().optional() - .allow(null), + .allow(null), terms: Joi.array().items(Joi.number().positive()).optional(), external: Joi.object().keys({ id: Joi.string(), @@ -212,11 +212,11 @@ function createProjectAndPhases(req, project, projectTemplate, productTemplates, req.log.debug('creating project estimation items with building blocks'); if (result.estimations && result.estimations.length > 0) { return createEstimationItemsWithBuildingBlock(result.estimations, req.authUser.userId) - .then((estimationItems) => { - req.log.debug(`creating ${estimationItems.length} project estimation items`); - // ignore project estimation items for now - return Promise.resolve(newProject); - }); + .then((estimationItems) => { + req.log.debug(`creating ${estimationItems.length} project estimation items`); + // ignore project estimation items for now + return Promise.resolve(newProject); + }); } return Promise.resolve(newProject); }).then((newProject) => { @@ -235,61 +235,61 @@ function createProjectAndPhases(req, project, projectTemplate, productTemplates, } return Promise.resolve(newProject); }) - .then((newProject) => { - result.newProject = newProject; + .then((newProject) => { + result.newProject = newProject; - // backward compatibility for releasing the service before releasing the front end - if (!projectTemplate) { - return Promise.resolve(result); - } - const productTemplateMap = {}; - productTemplates.forEach((pt) => { - productTemplateMap[pt.id] = pt; - }); + // backward compatibility for releasing the service before releasing the front end + if (!projectTemplate) { + return Promise.resolve(result); + } + const productTemplateMap = {}; + productTemplates.forEach((pt) => { + productTemplateMap[pt.id] = pt; + }); - if (phasesList) { - return Promise.all(_.map(phasesList, (phase, phaseIdx) => { - const duration = _.get(phase, 'duration', 1); - const startDate = moment.utc().hours(0).minutes(0).seconds(0) - .milliseconds(0); - // Create phase - return models.ProjectPhase.create({ - projectId: newProject.id, - name: _.get(phase, 'name', `Stage ${phaseIdx}`), - duration, - startDate: startDate.format(), - endDate: moment.utc(startDate).add(duration - 1, 'days').format(), - status: _.get(phase, 'status', PROJECT_PHASE_STATUS.DRAFT), - budget: _.get(phase, 'budget', 0), - updatedBy: req.authUser.userId, - createdBy: req.authUser.userId, - }).then((newPhase) => { - req.log.debug(`Creating products in the newly created phase ${newPhase.id}`); - // Create products - return models.PhaseProduct.bulkCreate(_.map(phase.products, (product, productIndex) => ({ - phaseId: newPhase.id, + if (phasesList) { + return Promise.all(_.map(phasesList, (phase, phaseIdx) => { + const duration = _.get(phase, 'duration', 1); + const startDate = moment.utc().hours(0).minutes(0).seconds(0) + .milliseconds(0); + // Create phase + return models.ProjectPhase.create({ projectId: newProject.id, - estimatedPrice: _.get(product, 'estimatedPrice', 0), - name: _.get(product, 'name', _.get(productTemplateMap, `${product.id}.name`, `Product ${productIndex}`)), - // assumes that phase template always contains id of each product - templateId: parseInt(product.id, 10), + name: _.get(phase, 'name', `Stage ${phaseIdx}`), + duration, + startDate: startDate.format(), + endDate: moment.utc(startDate).add(duration - 1, 'days').format(), + status: _.get(phase, 'status', PROJECT_PHASE_STATUS.DRAFT), + budget: _.get(phase, 'budget', 0), updatedBy: req.authUser.userId, createdBy: req.authUser.userId, - })), { returning: true }) - .then((products) => { - // Add phases and products to the project JSON, so they can be stored to ES later - const newPhaseJson = _.omit(newPhase.toJSON(), ['deletedAt', 'deletedBy']); - newPhaseJson.products = _.map(products, product => - _.omit(product.toJSON(), ['deletedAt', 'deletedBy'])); - result.newPhases.push(newPhaseJson); - return Promise.resolve(); + }).then((newPhase) => { + req.log.debug(`Creating products in the newly created phase ${newPhase.id}`); + // Create products + return models.PhaseProduct.bulkCreate(_.map(phase.products, (product, productIndex) => ({ + phaseId: newPhase.id, + projectId: newProject.id, + estimatedPrice: _.get(product, 'estimatedPrice', 0), + name: _.get(product, 'name', _.get(productTemplateMap, `${product.id}.name`, `Product ${productIndex}`)), + // assumes that phase template always contains id of each product + templateId: parseInt(product.id, 10), + updatedBy: req.authUser.userId, + createdBy: req.authUser.userId, + })), { returning: true }) + .then((products) => { + // Add phases and products to the project JSON, so they can be stored to ES later + const newPhaseJson = _.omit(newPhase.toJSON(), ['deletedAt', 'deletedBy']); + newPhaseJson.products = _.map(products, product => + _.omit(product.toJSON(), ['deletedAt', 'deletedBy'])); + result.newPhases.push(newPhaseJson); + return Promise.resolve(); + }); }); - }); - })); - } - return Promise.resolve(); - }) - .then(() => Promise.resolve(result)); + })); + } + return Promise.resolve(); + }) + .then(() => Promise.resolve(result)); } /** @@ -303,77 +303,77 @@ function validateAndFetchTemplates(templateId) { // we ignore missing template id field and create a project without phase/products if (!templateId) return Promise.resolve({}); return models.ProjectTemplate.findByPk(templateId, { raw: true }) - .then((existingProjectTemplate) => { - if (!existingProjectTemplate) { + .then((existingProjectTemplate) => { + if (!existingProjectTemplate) { // Not found - const apiErr = new Error(`Project template not found for id ${templateId}`); - apiErr.status = 400; - return Promise.reject(apiErr); - } - return Promise.resolve(existingProjectTemplate); - }) - .then((projectTemplate) => { + const apiErr = new Error(`Project template not found for id ${templateId}`); + apiErr.status = 400; + return Promise.reject(apiErr); + } + return Promise.resolve(existingProjectTemplate); + }) + .then((projectTemplate) => { // for old projectTemplate with `phases` just get phases config directly from projectTemplate - if (projectTemplate.phases) { + if (projectTemplate.phases) { // for now support both ways: creating phases and creating workstreams - const phasesList = _(projectTemplate.phases).omit('workstreamsConfig').values().value(); - const workstreamsConfig = _.get(projectTemplate.phases, 'workstreamsConfig'); + const phasesList = _(projectTemplate.phases).omit('workstreamsConfig').values().value(); + const workstreamsConfig = _.get(projectTemplate.phases, 'workstreamsConfig'); - return { projectTemplate, phasesList, workstreamsConfig }; - } + return { projectTemplate, phasesList, workstreamsConfig }; + } - // for new projectTemplates try to get phases from the `planConfig`, if it's defined - if (projectTemplate.planConfig) { - return models.PlanConfig.findOneWithLatestRevision(projectTemplate.planConfig).then((planConfig) => { - if (!planConfig) { - const apiErr = new Error(`Cannot find planConfig ${JSON.stringify(projectTemplate.planConfig)}`); - apiErr.status = 400; - throw apiErr; - } + // for new projectTemplates try to get phases from the `planConfig`, if it's defined + if (projectTemplate.planConfig) { + return models.PlanConfig.findOneWithLatestRevision(projectTemplate.planConfig).then((planConfig) => { + if (!planConfig) { + const apiErr = new Error(`Cannot find planConfig ${JSON.stringify(projectTemplate.planConfig)}`); + apiErr.status = 400; + throw apiErr; + } - // for now support both ways: creating phases and creating workstreams - const phasesList = _(planConfig.config).omit('workstreamsConfig').values().value(); - const workstreamsConfig = _.get(planConfig.config, 'workstreamsConfig'); + // for now support both ways: creating phases and creating workstreams + const phasesList = _(planConfig.config).omit('workstreamsConfig').values().value(); + const workstreamsConfig = _.get(planConfig.config, 'workstreamsConfig'); - return { projectTemplate, phasesList, workstreamsConfig }; - }); - } + return { projectTemplate, phasesList, workstreamsConfig }; + }); + } - return { projectTemplate }; - }) - .then(({ projectTemplate, phasesList, workstreamsConfig }) => { - const productPromises = []; - if (phasesList) { - phasesList.forEach((phase) => { + return { projectTemplate }; + }) + .then(({ projectTemplate, phasesList, workstreamsConfig }) => { + const productPromises = []; + if (phasesList) { + phasesList.forEach((phase) => { // Make sure number of products of per phase <= max value - const productCount = _.isArray(phase.products) ? phase.products.length : 0; - if (productCount > config.maxPhaseProductCount) { - const apiErr = new Error(`Number of products per phase cannot exceed ${config.maxPhaseProductCount}`); - apiErr.status = 400; - throw apiErr; - } - _.map(phase.products, (product) => { - productPromises.push(models.ProductTemplate.findByPk(product.id) - .then((productTemplate) => { - if (!productTemplate) { - // Not found - const apiErr = new Error(`Product template not found for id ${product.id}`); - apiErr.status = 400; - return Promise.reject(apiErr); - } - return Promise.resolve(productTemplate); - })); + const productCount = _.isArray(phase.products) ? phase.products.length : 0; + if (productCount > config.maxPhaseProductCount) { + const apiErr = new Error(`Number of products per phase cannot exceed ${config.maxPhaseProductCount}`); + apiErr.status = 400; + throw apiErr; + } + _.map(phase.products, (product) => { + productPromises.push(models.ProductTemplate.findByPk(product.id) + .then((productTemplate) => { + if (!productTemplate) { + // Not found + const apiErr = new Error(`Product template not found for id ${product.id}`); + apiErr.status = 400; + return Promise.reject(apiErr); + } + return Promise.resolve(productTemplate); + })); + }); }); - }); - } - if (productPromises.length > 0) { - return Promise.all(productPromises).then(productTemplates => ( - { projectTemplate, productTemplates, phasesList, workstreamsConfig } - )); - } - // if there is no phase or product in a phase is specified, return empty product templates - return Promise.resolve({ projectTemplate, productTemplates: [], phasesList, workstreamsConfig }); - }); + } + if (productPromises.length > 0) { + return Promise.all(productPromises).then(productTemplates => ( + { projectTemplate, productTemplates, phasesList, workstreamsConfig } + )); + } + // if there is no phase or product in a phase is specified, return empty product templates + return Promise.resolve({ projectTemplate, productTemplates: [], phasesList, workstreamsConfig }); + }); } module.exports = [ @@ -381,12 +381,24 @@ module.exports = [ validate(createProjectValidations), permissions('project.create'), fieldLookupValidation(models.ProjectType, 'key', 'body.type', 'Project type'), - /** + /* * POST projects/ * Create a project if the user has access */ (req, res, next) => { const project = req.body; + if (_.has(project, 'directProjectId') && + !util.hasPermissionByReq(PERMISSION.MANAGE_PROJECT_DIRECT_PROJECT_ID, req)) { + const err = new Error('You do not have permission to set \'directProjectId\' property'); + err.status = 400; + throw err; + } + if (_.has(project, 'billingAccountId') && + !util.hasPermissionByReq(PERMISSION.MANAGE_PROJECT_BILLING_ACCOUNT_ID, req)) { + const err = new Error('You do not have permission to set \'billingAccountId\' property'); + err.status = 400; + throw err; + } // by default connect admin and managers joins projects as manager const userRole = util.hasPermissionByReq(PERMISSION.CREATE_PROJECT_AS_MANAGER, req) ? PROJECT_MEMBER_ROLE.MANAGER @@ -435,75 +447,75 @@ module.exports = [ // Validate the templates return validateAndFetchTemplates(project.templateId) // Create project and phases - .then(({ projectTemplate, productTemplates, phasesList, workstreamsConfig }) => { - req.log.debug('Creating project, phase and products'); - // only if workstream config is provided, treat such project as using workstreams - // otherwise project would still use phases - if (workstreamsConfig) { - _.set(project, 'details.settings.workstreams', true); - } - return createProjectAndPhases(req, project, projectTemplate, productTemplates, phasesList) - .then(createdProjectAndPhases => - createWorkstreams(req, createdProjectAndPhases.newProject, workstreamsConfig) - .then(() => createdProjectAndPhases), - ); - }) - .then((createdProjectAndPhases) => { - newProject = createdProjectAndPhases.newProject; - newPhases = createdProjectAndPhases.newPhases; - projectEstimations = createdProjectAndPhases.estimations; - projectAttachments = createdProjectAndPhases.attachments; - - req.log.debug('new project created (id# %d, name: %s)', newProject.id, newProject.name); - // create direct project with name and description - const body = { - projectName: newProject.name, - projectDescription: newProject.description, - }; - // billingAccountId is optional field - if (newProject.billingAccountId) { - body.billingAccountId = newProject.billingAccountId; - } - req.log.debug('creating project history for project %d', newProject.id); - // add to project history asynchronously, don't wait for it to complete - models.ProjectHistory.create({ - projectId: newProject.id, - status: PROJECT_STATUS.IN_REVIEW, - cancelReason: null, - updatedBy: req.authUser.userId, - }).then(() => req.log.debug('project history created for project %d', newProject.id)) - .catch(() => req.log.error('project history failed for project %d', newProject.id)); - return Promise.resolve(); - }); - }) - .then(() => { - newProject = newProject.get({ plain: true }); - // remove utm details & deletedAt field - newProject = _.omit(newProject, ['deletedAt', 'utm']); - // add the project attachments, if any - newProject.attachments = projectAttachments; - // set phases array - newProject.phases = newPhases; - // sets estimations array - if (projectEstimations) { - newProject.estimations = projectEstimations; - } + .then(({ projectTemplate, productTemplates, phasesList, workstreamsConfig }) => { + req.log.debug('Creating project, phase and products'); + // only if workstream config is provided, treat such project as using workstreams + // otherwise project would still use phases + if (workstreamsConfig) { + _.set(project, 'details.settings.workstreams', true); + } + return createProjectAndPhases(req, project, projectTemplate, productTemplates, phasesList) + .then(createdProjectAndPhases => + createWorkstreams(req, createdProjectAndPhases.newProject, workstreamsConfig) + .then(() => createdProjectAndPhases), + ); + }) + .then((createdProjectAndPhases) => { + newProject = createdProjectAndPhases.newProject; + newPhases = createdProjectAndPhases.newPhases; + projectEstimations = createdProjectAndPhases.estimations; + projectAttachments = createdProjectAndPhases.attachments; - req.log.debug('Sending event to RabbitMQ bus for project %d', newProject.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED, - newProject, - { correlationId: req.id }, - ); - req.log.debug('Sending event to Kafka bus for project %d', newProject.id); - // emit event - req.app.emit(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED, - { req, project: _.assign({ resource: RESOURCES.PROJECT }, newProject), + req.log.debug('new project created (id# %d, name: %s)', newProject.id, newProject.name); + // create direct project with name and description + const body = { + projectName: newProject.name, + projectDescription: newProject.description, + }; + // billingAccountId is optional field + if (newProject.billingAccountId) { + body.billingAccountId = newProject.billingAccountId; + } + req.log.debug('creating project history for project %d', newProject.id); + // add to project history asynchronously, don't wait for it to complete + models.ProjectHistory.create({ + projectId: newProject.id, + status: PROJECT_STATUS.IN_REVIEW, + cancelReason: null, + updatedBy: req.authUser.userId, + }).then(() => req.log.debug('project history created for project %d', newProject.id)) + .catch(() => req.log.error('project history failed for project %d', newProject.id)); + return Promise.resolve(); }); - res.status(201).json(newProject); }) - .catch((err) => { - req.log.error(err.message); - util.handleError('Error creating project', err, req, next); - }); + .then(() => { + newProject = newProject.get({ plain: true }); + // remove utm details & deletedAt field + newProject = _.omit(newProject, ['deletedAt', 'utm']); + // add the project attachments, if any + newProject.attachments = projectAttachments; + // set phases array + newProject.phases = newPhases; + // sets estimations array + if (projectEstimations) { + newProject.estimations = projectEstimations; + } + + req.log.debug('Sending event to RabbitMQ bus for project %d', newProject.id); + req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED, + newProject, + { correlationId: req.id }, + ); + req.log.debug('Sending event to Kafka bus for project %d', newProject.id); + // emit event + req.app.emit(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED, + { req, project: _.assign({ resource: RESOURCES.PROJECT }, newProject), + }); + res.status(201).json(newProject); + }) + .catch((err) => { + req.log.error(err.message); + util.handleError('Error creating project', err, req, next); + }); }, ]; diff --git a/src/routes/projects/create.spec.js b/src/routes/projects/create.spec.js index ea8df85b..07fb0670 100644 --- a/src/routes/projects/create.spec.js +++ b/src/routes/projects/create.spec.js @@ -265,7 +265,6 @@ describe('Project create', () => { type: 'generic', description: 'test project', details: {}, - billingAccountId: 1, name: 'test project1', bookmarks: [{ title: 'title1', @@ -277,7 +276,6 @@ describe('Project create', () => { type: 'generic', description: 'test project', details: {}, - billingAccountId: 1, name: 'test project1', attachments: [ { @@ -399,6 +397,34 @@ describe('Project create', () => { .expect(400, done); }); + it(`should return 400 when creating project with billingAccountId + without "write:projects-billing-accounts" scope in M2M token`, (done) => { + const validBody = _.cloneDeep(body); + validBody.billingAccountId = 1; + request(server) + .post('/v5/projects') + .set({ + Authorization: `Bearer ${testUtil.m2m['write:projects']}`, + }) + .send(validBody) + .expect('Content-Type', /json/) + .expect(400, done); + }); + + it(`should return 400 when creating project with directProjectId + without "write:projects" scope in M2M token`, (done) => { + const validBody = _.cloneDeep(body); + validBody.directProjectId = 1; + request(server) + .post('/v5/projects') + .set({ + Authorization: `Bearer ${testUtil.m2m['write:project-members']}`, + }) + .send(validBody) + .expect('Content-Type', /json/) + .expect(400, done); + }); + it('should return 201 if valid user and data', (done) => { const validBody = _.cloneDeep(body); validBody.templateId = 3; @@ -433,7 +459,7 @@ describe('Project create', () => { } else { const resJson = res.body; should.exist(resJson); - should.exist(resJson.billingAccountId); + should.not.exist(resJson.billingAccountId); should.exist(resJson.name); resJson.status.should.be.eql('in_review'); resJson.type.should.be.eql(body.type); @@ -489,7 +515,7 @@ describe('Project create', () => { } else { const resJson = res.body; should.exist(resJson); - should.exist(resJson.billingAccountId); + should.not.exist(resJson.billingAccountId); should.exist(resJson.name); resJson.status.should.be.eql('in_review'); resJson.type.should.be.eql(body.type); @@ -544,7 +570,7 @@ describe('Project create', () => { } else { const resJson = res.body; should.exist(resJson); - should.exist(resJson.billingAccountId); + should.not.exist(resJson.billingAccountId); should.exist(resJson.name); resJson.status.should.be.eql('in_review'); resJson.type.should.be.eql(body.type); @@ -598,7 +624,7 @@ describe('Project create', () => { } else { const resJson = res.body; should.exist(resJson); - should.exist(resJson.billingAccountId); + should.not.exist(resJson.billingAccountId); should.exist(resJson.name); resJson.status.should.be.eql('in_review'); resJson.type.should.be.eql(bodyWithAttachments.type); @@ -679,7 +705,7 @@ describe('Project create', () => { } else { const resJson = res.body; should.exist(resJson); - should.exist(resJson.billingAccountId); + should.not.exist(resJson.billingAccountId); should.exist(resJson.name); resJson.status.should.be.eql('in_review'); resJson.type.should.be.eql(body.type); @@ -752,7 +778,7 @@ describe('Project create', () => { } else { const resJson = res.body; should.exist(resJson); - should.exist(resJson.billingAccountId); + should.not.exist(resJson.billingAccountId); should.exist(resJson.name); resJson.status.should.be.eql('in_review'); resJson.type.should.be.eql(body.type); @@ -885,7 +911,7 @@ describe('Project create', () => { } else { const resJson = res.body; should.exist(resJson); - should.exist(resJson.billingAccountId); + should.not.exist(resJson.billingAccountId); should.exist(resJson.name); resJson.status.should.be.eql('in_review'); resJson.type.should.be.eql(body.type); diff --git a/src/routes/projects/delete.js b/src/routes/projects/delete.js index bdbf7b03..8ae66a92 100644 --- a/src/routes/projects/delete.js +++ b/src/routes/projects/delete.js @@ -28,18 +28,18 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(project => project.destroy({ cascade: true }))) - .then((project) => { - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_DELETED, - { id: projectId }, - { correlationId: req.id }, - ); - // emit event - req.app.emit(EVENT.ROUTING_KEY.PROJECT_DELETED, - { req, project: _.assign({ resource: RESOURCES.PROJECT }, _.pick(project.toJSON(), 'id')), - }); - res.status(204).json({}); - }) - .catch(err => next(err)); + .then((project) => { + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_DELETED, + { id: projectId }, + { correlationId: req.id }, + ); + // emit event + req.app.emit(EVENT.ROUTING_KEY.PROJECT_DELETED, + { req, project: _.assign({ resource: RESOURCES.PROJECT }, _.pick(project.toJSON(), 'id')), + }); + res.status(204).json({}); + }) + .catch(err => next(err)); }, ]; diff --git a/src/routes/projects/delete.spec.js b/src/routes/projects/delete.spec.js index 20dbea78..b1a46db3 100644 --- a/src/routes/projects/delete.spec.js +++ b/src/routes/projects/delete.spec.js @@ -9,28 +9,28 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (id, err, next) => { if (err) throw err; setTimeout(() => - models.Project.findOne({ - where: { - id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.Project.findOne({ + where: { + id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404) - .end(next); - } - }), 500); + request(server) + .get(`/v5/projects/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404) + .end(next); + } + }), 500); }; describe('Project delete test', () => { let project1; diff --git a/src/routes/projects/get.js b/src/routes/projects/get.js index 148601b2..1e0b22c9 100644 --- a/src/routes/projects/get.js +++ b/src/routes/projects/get.js @@ -3,6 +3,8 @@ import config from 'config'; import { middleware as tcMiddleware } from 'tc-core-library-js'; import models from '../../models'; import util from '../../util'; +import { PERMISSION } from '../../permissions/constants'; +import permissionUtils from '../../utils/permissions'; const ES_PROJECT_INDEX = config.get('elasticsearchConfig.indexName'); const ES_PROJECT_TYPE = config.get('elasticsearchConfig.docType'); @@ -76,7 +78,7 @@ const parseElasticSearchCriteria = (projectId, fields) => { } if (sourceInclude) { - searchCriteria._sourceIncludes = sourceInclude; // eslint-disable-line no-underscore-dangle + searchCriteria._sourceIncludes = sourceInclude; // eslint-disable-line no-underscore-dangle } @@ -103,7 +105,8 @@ const retrieveProjectFromES = (projectId, req) => { fields = fields ? fields.split(',') : []; fields = util.parseFields(fields, { projects: PROJECT_ATTRIBUTES, - project_members: util.addUserDetailsFieldsIfAllowed(PROJECT_MEMBER_ATTRIBUTES_ES, req), + project_members: util.hasPermissionByReq(PERMISSION.READ_PROJECT_MEMBER, req) + ? util.addUserDetailsFieldsIfAllowed(PROJECT_MEMBER_ATTRIBUTES_ES, req) : null, project_member_invites: PROJECT_MEMBER_INVITE_ATTRIBUTES, project_phases: PROJECT_PHASE_ATTRIBUTES, project_phases_products: PROJECT_PHASE_PRODUCTS_ATTRIBUTES, @@ -114,8 +117,27 @@ const retrieveProjectFromES = (projectId, req) => { return new Promise((accept, reject) => { const es = util.getElasticSearchClient(); es.search(searchCriteria).then((docs) => { - const rows = _.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle - accept(rows[0]); + const rows = _.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle + const project = rows[0]; + if (project && project.invites) { + if (!util.hasPermissionByReq(PERMISSION.READ_PROJECT_INVITE_NOT_OWN, req)) { + let invites; + if (util.hasPermissionByReq(PERMISSION.READ_PROJECT_INVITE_OWN, req)) { + // only include own invites + const currentUserId = req.authUser.userId; + const currentUserEmail = req.authUser.email; + invites = _.filter(project.invites, invite => ( + (invite.userId !== null && invite.userId === currentUserId) || + (invite.email && currentUserEmail && invite.email.toLowerCase() === currentUserEmail.toLowerCase()) + )); + } else { + // return empty invites + invites = []; + } + _.set(project, 'invites', invites); + } + } + accept(project); }).catch(reject); }); }; @@ -137,43 +159,55 @@ const retrieveProjectFromDB = (projectId, req) => { }).then((_project) => { project = _project; if (!project) { - // returning 404 + // returning 404 const apiErr = new Error(`project not found for id ${projectId}`); apiErr.status = 404; return Promise.reject(apiErr); } - // check context for project members - project.members = _.map(req.context.currentProjectMembers, m => _.pick(m, fields.project_members)); - // check if attachments field was requested + // check context for project members + if (util.hasPermissionByReq(PERMISSION.READ_PROJECT_MEMBER, req)) { + project.members = _.map(req.context.currentProjectMembers, m => _.pick(m, fields.project_members)); + } + // check if attachments field was requested if (!req.query.fields || _.indexOf(req.query.fields, 'attachments') > -1) { return util.getProjectAttachments(req, project.id); } - // return null if attachments were not requested. + // return null if attachments were not requested. return Promise.resolve(null); }) - .then((attachments) => { - // if attachments were requested - if (attachments) { - project.attachments = attachments; - } + .then((attachments) => { + // if attachments were requested + if (attachments) { + project.attachments = attachments; + } + if (util.hasPermissionByReq(PERMISSION.READ_PROJECT_INVITE_NOT_OWN, req)) { + // include all invites return models.ProjectMemberInvite.getPendingAndReguestedInvitesForProject(projectId); - }) - .then((invites) => { - project.invites = invites; - return project; - }); + } else if (util.hasPermissionByReq(PERMISSION.READ_PROJECT_INVITE_OWN, req)) { + // include only own invites + const currentUserId = req.authUser.userId; + const email = req.authUser.email; + return models.ProjectMemberInvite.getPendingOrRequestedProjectInvitesForUser(projectId, email, currentUserId); + } + // empty + return Promise.resolve([]); + }) + .then((invites) => { + project.invites = invites; + return project; + }); }; module.exports = [ permissions('project.view'), - /** + /* * GET projects/{projectId} * Get a project by id */ (req, res, next) => { const projectId = Number(req.params.projectId); - // parse the fields string to determine what fields are to be returned + // parse the fields string to determine what fields are to be returned return retrieveProjectFromES(projectId, req).then((result) => { if (result === undefined) { @@ -183,7 +217,15 @@ module.exports = [ req.log.debug('Project found in ES'); return result; }).then((project) => { - res.status(200).json(util.postProcessInvites('$.invites[?(@.email)]', project, req)); + const postProcessedProject = util.postProcessInvites('$.invites[?(@.email)]', project, req); + + // filter out attachments which user cannot see + if (postProcessedProject.attachments) { + postProcessedProject.attachments = postProcessedProject.attachments.filter(attachment => + permissionUtils.hasReadAccessToAttachment(attachment, req), + ); + } + res.status(200).json(postProcessedProject); }) .catch(err => next(err)); }, diff --git a/src/routes/projects/get.spec.js b/src/routes/projects/get.spec.js index a12e46f6..be72238b 100644 --- a/src/routes/projects/get.spec.js +++ b/src/routes/projects/get.spec.js @@ -115,81 +115,81 @@ describe('GET Project', () => { let project2; before((done) => { testUtil.clearDb() - .then(() => testUtil.clearES()) - .then(() => { - const p1 = models.Project.create({ - id: 5, - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - details: {}, + .then(() => testUtil.clearES()) + .then(() => { + const p1 = models.Project.create({ + id: 5, + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project1 = p; + // create members + const pm1 = models.ProjectMember.create({ + userId: 40051331, + projectId: project1.id, + role: 'customer', + isPrimary: true, + firstName: 'Firstname', + lastName: 'Lastname', + handle: 'test_tourist_handle', + email: 'test@test.com', + createdBy: 1, + updatedBy: 1, + }); + const pm2 = models.ProjectMember.create({ + userId: 40051333, + projectId: project1.id, + role: 'copilot', + isPrimary: true, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project1 = p; - // create members - const pm1 = models.ProjectMember.create({ - userId: 40051331, - projectId: project1.id, - role: 'customer', - isPrimary: true, - firstName: 'Firstname', - lastName: 'Lastname', - handle: 'test_tourist_handle', - email: 'test@test.com', - createdBy: 1, - updatedBy: 1, - }); - const pm2 = models.ProjectMember.create({ - userId: 40051333, - projectId: project1.id, - role: 'copilot', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }); - return Promise.all([pm1, pm2]); }); + return Promise.all([pm1, pm2]); + }); - const p2 = models.Project.create({ - type: 'visual_design', - billingAccountId: 1, - name: 'test2', - description: 'db_project', - id: 2, - status: 'draft', - details: {}, + const p2 = models.Project.create({ + type: 'visual_design', + billingAccountId: 1, + name: 'test2', + description: 'db_project', + id: 2, + status: 'draft', + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }).then((p) => { + project2 = p; + return models.ProjectMember.create({ + userId: 40051335, + projectId: project2.id, + role: 'manager', + handle: 'manager_handle', + isPrimary: true, createdBy: 1, updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }).then((p) => { - project2 = p; - return models.ProjectMember.create({ - userId: 40051335, - projectId: project2.id, - role: 'manager', - handle: 'manager_handle', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }); }); - return Promise.all([p1, p2]) - .then(() => server.services.es.index({ - index: ES_PROJECT_INDEX, - type: ES_PROJECT_TYPE, - id: data[0].id, - body: data[0], - })).then(() => { - testUtil.wait(done); - // done(); - }); }); + return Promise.all([p1, p2]) + .then(() => server.services.es.index({ + index: ES_PROJECT_INDEX, + type: ES_PROJECT_TYPE, + id: data[0].id, + body: data[0], + })).then(() => { + testUtil.wait(done); + // done(); + }); + }); }); after((done) => { @@ -201,34 +201,206 @@ describe('GET Project', () => { describe('GET /projects/{id}', () => { it('should return 403 if user is not authenticated', (done) => { request(server) - .get(`/v5/projects/${project2.id}`) - .expect(403) - .end(done); + .get(`/v5/projects/${project2.id}`) + .expect(403) + .end(done); }); it('should return 404 if requested project doesn\'t exist', (done) => { request(server) - .get('/v5/projects/14343323') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404) - .end(done); + .get('/v5/projects/14343323') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404) + .end(done); }); it('should return 403 if user does not have access to the project', (done) => { request(server) - .get(`/v5/projects/${project2.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .expect(403) - .end(done); + .get(`/v5/projects/${project2.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .expect(403) + .end(done); }); it('should return the project when registerd member attempts to access the project', (done) => { request(server) - .get(`/v5/projects/${project1.id}/?fields=id%2Cname%2Cstatus%2Cmembers.role%2Cmembers.id%2Cmembers.userId`) + .get(`/v5/projects/${project1.id}/?fields=id%2Cname%2Cstatus%2Cmembers.role%2Cmembers.id%2Cmembers.userId`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + should.not.exist(resJson.deletedAt); + should.not.exist(resJson.billingAccountId); + should.exist(resJson.name); + resJson.status.should.be.eql('draft'); + resJson.members.should.have.lengthOf(2); + done(); + } + }); + }); + + it('should return the project using M2M token with "read:projects" scope', (done) => { + request(server) + .get(`/v5/projects/${project1.id}/?fields=id%2Cname%2Cstatus%2Cmembers.role%2Cmembers.id%2Cmembers.userId`) + .set({ + Authorization: `Bearer ${testUtil.m2m['read:projects']}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + should.not.exist(resJson.deletedAt); + should.not.exist(resJson.billingAccountId); + should.exist(resJson.name); + resJson.status.should.be.eql('draft'); + should.not.exist(resJson.members); + done(); + } + }); + }); + + it('should return the project with empty invites using M2M token without "read:project-invites" scope', (done) => { + request(server) + .get(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.m2m['read:projects']}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.invites.should.be.empty; + done(); + } + }); + }); + + it('should return project with "members", "invites", and "attachments" by default when data comes from ES', (done) => { + request(server) + .get(`/v5/projects/${data[0].id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.description.should.be.eql('es_project'); + resJson.members.should.have.lengthOf(2); + resJson.members[0].firstName.should.equal('es_member_1_firstName'); + + resJson.attachments.should.have.lengthOf(2); + resJson.attachments[0].id.should.eql(data[0].attachments[0].id); + resJson.attachments[0].title.should.eql(data[0].attachments[0].title); + resJson.attachments[0].projectId.should.eql(data[0].attachments[0].projectId); + resJson.attachments[0].description.should.eql(data[0].attachments[0].description); + resJson.attachments[0].path.should.eql(data[0].attachments[0].path); + resJson.attachments[0].tags.should.eql(data[0].attachments[0].tags); + resJson.attachments[0].contentType.should.eql(data[0].attachments[0].contentType); + resJson.attachments[0].createdBy.should.eql(data[0].attachments[0].createdBy); + resJson.attachments[0].updatedBy.should.eql(data[0].attachments[0].updatedBy); + + resJson.attachments[1].id.should.eql(data[0].attachments[1].id); + resJson.attachments[1].title.should.eql(data[0].attachments[1].title); + resJson.attachments[1].projectId.should.eql(data[0].attachments[1].projectId); + resJson.attachments[1].description.should.eql(data[0].attachments[1].description); + resJson.attachments[1].path.should.eql(data[0].attachments[1].path); + resJson.attachments[1].tags.should.eql(data[0].attachments[1].tags); + resJson.attachments[1].createdBy.should.eql(data[0].attachments[1].createdBy); + resJson.attachments[1].updatedBy.should.eql(data[0].attachments[1].updatedBy); + + done(); + } + }); + }); + + it('should return project with "members", "invites", and "attachments" by default when data comes from DB', (done) => { + request(server) + .get(`/v5/projects/${project2.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.description.should.be.eql('db_project'); + resJson.members.should.have.lengthOf(1); + resJson.members[0].role.should.equal('manager'); + done(); + } + }); + }); + + it('should return the project for administrator ', (done) => { + request(server) + .get(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + done(); + } + }); + }); + + it('should return the project for connect admin ', (done) => { + request(server) + .get(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + done(); + } + }); + }); + + describe('URL Query fields', () => { + it('should not return "email" for project members when "fields" query param is not defined (to non-admin users)', (done) => { + request(server) + .get(`/v5/projects/${project1.id}`) .set({ Authorization: `Bearer ${testUtil.jwts.member}`, }) @@ -240,21 +412,18 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); - should.not.exist(resJson.deletedAt); - should.not.exist(resJson.billingAccountId); - should.exist(resJson.name); - resJson.status.should.be.eql('draft'); - resJson.members.should.have.lengthOf(2); + resJson.members[0].should.have.property('handle'); + resJson.members[0].should.not.have.property('email'); done(); } }); - }); + }); - it('should return the project using M2M token with "read:projects" scope', (done) => { - request(server) - .get(`/v5/projects/${project1.id}/?fields=id%2Cname%2Cstatus%2Cmembers.role%2Cmembers.id%2Cmembers.userId`) + it('should not return "email" for project members even if it\'s listed in "fields" query param (to non-admin users)', (done) => { + request(server) + .get(`/v5/projects/${project1.id}?fields=members.email,members.handle`) .set({ - Authorization: `Bearer ${testUtil.m2m['read:projects']}`, + Authorization: `Bearer ${testUtil.jwts.member}`, }) .expect('Content-Type', /json/) .expect(200) @@ -264,21 +433,19 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); - should.not.exist(resJson.deletedAt); - should.not.exist(resJson.billingAccountId); - should.exist(resJson.name); - resJson.status.should.be.eql('draft'); - resJson.members.should.have.lengthOf(2); + resJson.members[0].should.have.property('handle'); + resJson.members[0].should.not.have.property('email'); done(); } }); - }); + }); - it('should return project with "members", "invites", and "attachments" by default when data comes from ES', (done) => { - request(server) - .get(`/v5/projects/${data[0].id}`) + + it('should not return "cancelReason" if it is not listed in "fields" query param ', (done) => { + request(server) + .get(`/v5/projects/${project1.id}?fields=description`) .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, + Authorization: `Bearer ${testUtil.jwts.member}`, }) .expect('Content-Type', /json/) .expect(200) @@ -288,38 +455,17 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); - resJson.description.should.be.eql('es_project'); - resJson.members.should.have.lengthOf(2); - resJson.members[0].firstName.should.equal('es_member_1_firstName'); - - resJson.attachments.should.have.lengthOf(2); - resJson.attachments[0].id.should.eql(data[0].attachments[0].id); - resJson.attachments[0].title.should.eql(data[0].attachments[0].title); - resJson.attachments[0].projectId.should.eql(data[0].attachments[0].projectId); - resJson.attachments[0].description.should.eql(data[0].attachments[0].description); - resJson.attachments[0].path.should.eql(data[0].attachments[0].path); - resJson.attachments[0].tags.should.eql(data[0].attachments[0].tags); - resJson.attachments[0].contentType.should.eql(data[0].attachments[0].contentType); - resJson.attachments[0].createdBy.should.eql(data[0].attachments[0].createdBy); - resJson.attachments[0].updatedBy.should.eql(data[0].attachments[0].updatedBy); - - resJson.attachments[1].id.should.eql(data[0].attachments[1].id); - resJson.attachments[1].title.should.eql(data[0].attachments[1].title); - resJson.attachments[1].projectId.should.eql(data[0].attachments[1].projectId); - resJson.attachments[1].description.should.eql(data[0].attachments[1].description); - resJson.attachments[1].path.should.eql(data[0].attachments[1].path); - resJson.attachments[1].tags.should.eql(data[0].attachments[1].tags); - resJson.attachments[1].createdBy.should.eql(data[0].attachments[1].createdBy); - resJson.attachments[1].updatedBy.should.eql(data[0].attachments[1].updatedBy); - + resJson.should.have.property('description'); + resJson.description.should.be.eq('es_project'); + resJson.should.not.have.property('cancelReason'); done(); } }); - }); + }); - it('should return project with "members", "invites", and "attachments" by default when data comes from DB', (done) => { - request(server) - .get(`/v5/projects/${project2.id}`) + it('should not return "email" for project members if it\'s not listed in "fields" query param (to admin users)', (done) => { + request(server) + .get(`/v5/projects/${project1.id}?fields=description,members.id`) .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -331,17 +477,16 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); - resJson.description.should.be.eql('db_project'); - resJson.members.should.have.lengthOf(1); - resJson.members[0].role.should.equal('manager'); + resJson.members.should.have.lengthOf(2); + resJson.members[0].should.not.have.property('email'); done(); } }); - }); + }); - it('should return the project for administrator ', (done) => { - request(server) - .get(`/v5/projects/${project1.id}`) + it('should return "email" for project members if it\'s listed in "fields" query param (to admin users)', (done) => { + request(server) + .get(`/v5/projects/${project1.id}?fields=description,members.id,members.email`) .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -353,16 +498,19 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); + resJson.members.should.have.lengthOf(2); + resJson.members[0].should.have.property('email'); + resJson.members[0].email.should.be.eq('test@test.com'); done(); } }); - }); + }); - it('should return the project for connect admin ', (done) => { - request(server) - .get(`/v5/projects/${project1.id}`) + it('should only return "id" field, when it\'s the only field listed in "fields" query param', (done) => { + request(server) + .get(`/v5/projects/${project1.id}?fields=id`) .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + Authorization: `Bearer ${testUtil.jwts.admin}`, }) .expect('Content-Type', /json/) .expect(200) @@ -372,80 +520,16 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); + resJson.should.have.property('id'); + _.keys(resJson).length.should.be.eq(1); done(); } }); - }); - - describe('URL Query fields', () => { - it('should not return "email" for project members when "fields" query param is not defined (to non-admin users)', (done) => { - request(server) - .get(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.members[0].should.have.property('handle'); - resJson.members[0].should.not.have.property('email'); - done(); - } - }); }); - it('should not return "email" for project members even if it\'s listed in "fields" query param (to non-admin users)', (done) => { - request(server) - .get(`/v5/projects/${project1.id}?fields=members.email,members.handle`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.members[0].should.have.property('handle'); - resJson.members[0].should.not.have.property('email'); - done(); - } - }); - }); - - - it('should not return "cancelReason" if it is not listed in "fields" query param ', (done) => { - request(server) - .get(`/v5/projects/${project1.id}?fields=description`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.have.property('description'); - resJson.description.should.be.eq('es_project'); - resJson.should.not.have.property('cancelReason'); - done(); - } - }); - }); - - it('should not return "email" for project members if it\'s not listed in "fields" query param (to admin users)', (done) => { + it('should only return "invites.userId" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get(`/v5/projects/${project1.id}?fields=description,members.id`) + .get(`/v5/projects/${project1.id}?fields=invites.userId`) .set({ Authorization: `Bearer ${testUtil.jwts.admin}`, }) @@ -457,18 +541,18 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); - resJson.members.should.have.lengthOf(2); - resJson.members[0].should.not.have.property('email'); + resJson.invites[0].should.have.property('userId'); + _.keys(resJson.invites[0]).length.should.be.eq(1); done(); } }); }); - it('should return "email" for project members if it\'s listed in "fields" query param (to admin users)', (done) => { + it('should not return "userId" for any invite which has "email" field', (done) => { request(server) - .get(`/v5/projects/${project1.id}?fields=description,members.id,members.email`) + .get(`/v5/projects/${project1.id}`) .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, + Authorization: `Bearer ${testUtil.jwts.member}`, }) .expect('Content-Type', /json/) .expect(200) @@ -478,160 +562,96 @@ describe('GET Project', () => { } else { const resJson = res.body; should.exist(resJson); - resJson.members.should.have.lengthOf(2); - resJson.members[0].should.have.property('email'); - resJson.members[0].email.should.be.eq('test@test.com'); + resJson.invites.length.should.be.eql(1); + resJson.invites[0].should.have.property('email'); + should.not.exist(resJson.invites[0].userId); done(); } }); }); - it('should only return "id" field, when it\'s the only field listed in "fields" query param', (done) => { - request(server) - .get(`/v5/projects/${project1.id}?fields=id`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.have.property('id'); - _.keys(resJson).length.should.be.eq(1); - done(); - } - }); - }); - - it('should only return "invites.userId" field, when it\'s the only field listed in "fields" query param', (done) => { - request(server) - .get(`/v5/projects/${project1.id}?fields=invites.userId`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.invites[0].should.have.property('userId'); - _.keys(resJson.invites[0]).length.should.be.eq(1); - done(); - } - }); - }); - - it('should not return "userId" for any invite which has "email" field', (done) => { - request(server) - .get(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.invites.length.should.be.eql(1); - resJson.invites[0].should.have.property('email'); - should.not.exist(resJson.invites[0].userId); - done(); - } - }); - }); - it('should only return "members.role" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get(`/v5/projects/${project1.id}?fields=members.role`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.members[0].should.have.property('role'); - _.keys(resJson.members[0]).length.should.be.eq(1); - done(); - } - }); + .get(`/v5/projects/${project1.id}?fields=members.role`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.members[0].should.have.property('role'); + _.keys(resJson.members[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "attachments.title" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get(`/v5/projects/${project1.id}?fields=attachments.title`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.attachments[0].should.have.property('title'); - _.keys(resJson.attachments[0]).length.should.be.eq(1); - done(); - } - }); + .get(`/v5/projects/${project1.id}?fields=attachments.title`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.attachments[0].should.have.property('title'); + _.keys(resJson.attachments[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "phases.name" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get(`/v5/projects/${project1.id}?fields=phases.name`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.phases[0].should.have.property('name'); - _.keys(resJson.phases[0]).length.should.be.eq(1); - done(); - } - }); + .get(`/v5/projects/${project1.id}?fields=phases.name`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.phases[0].should.have.property('name'); + _.keys(resJson.phases[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "phases.products.name" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get(`/v5/projects/${project1.id}?fields=phases.products.name`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.phases[0].products[0].should.have.property('name'); - _.keys(resJson.phases[0].products[0]).length.should.be.eq(1); - done(); - } - }); + .get(`/v5/projects/${project1.id}?fields=phases.products.name`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.phases[0].products[0].should.have.property('name'); + _.keys(resJson.phases[0].products[0]).length.should.be.eq(1); + done(); + } + }); }); }); }); diff --git a/src/routes/projects/list.js b/src/routes/projects/list.js index a9ea8445..d7b55e91 100755 --- a/src/routes/projects/list.js +++ b/src/routes/projects/list.js @@ -5,6 +5,7 @@ import models from '../../models'; import { INVITE_STATUS, PROJECT_MEMBER_NON_CUSTOMER_ROLES } from '../../constants'; import util from '../../util'; import { PERMISSION } from '../../permissions/constants'; +import permissionUtils from '../../utils/permissions'; const ES_PROJECT_INDEX = config.get('elasticsearchConfig.indexName'); const ES_PROJECT_TYPE = config.get('elasticsearchConfig.docType'); @@ -21,8 +22,8 @@ const MATCH_TYPE_SINGLE_FIELD = 3; * */ const PROJECT_ATTRIBUTES = _.without(_.keys(models.Project.rawAttributes), - 'utm', - 'deletedAt', + 'utm', + 'deletedAt', ); const PROJECT_MEMBER_ATTRIBUTES = _.without(_.keys(models.ProjectMember.rawAttributes)); // project members has some additional fields stored in ES index, which we don't have in DB @@ -321,7 +322,7 @@ const parseElasticSearchCriteria = (criteria, fields, order) => { } if (sourceInclude) { - searchCriteria._sourceIncludes = sourceInclude; // eslint-disable-line no-underscore-dangle + searchCriteria._sourceIncludes = sourceInclude; // eslint-disable-line no-underscore-dangle } // prepare the elasticsearch filter criteria const boolQuery = []; @@ -483,7 +484,7 @@ const retrieveProjectsFromDB = (req, criteria, sort, ffields) => { // order by const order = sort ? [sort.split(' ')] : [['createdAt', 'asc']]; let fields = ffields ? ffields.split(',') : []; - // parse the fields string to determine what fields are to be returned + // parse the fields string to determine what fields are to be returned fields = util.parseFields(fields, { projects: PROJECT_ATTRIBUTES, project_members: PROJECT_MEMBER_ATTRIBUTES, @@ -492,6 +493,11 @@ const retrieveProjectsFromDB = (req, criteria, sort, ffields) => { // make sure project.id is part of fields if (_.indexOf(fields.projects, 'id') < 0) fields.projects.push('id'); + // add userId to project_members field so it can be used to check READ_PROJECT_MEMBER permission below. + const addMembersUserId = fields.project_members.length > 0 && _.indexOf(fields.project_members, 'userId') < 0; + if (addMembersUserId) { + fields.project_members.push('userId'); + } const retrieveAttachments = !req.query.fields || req.query.fields.indexOf('attachments') > -1; const retrieveMembers = !req.query.fields || !!fields.project_members.length; @@ -502,53 +508,65 @@ const retrieveProjectsFromDB = (req, criteria, sort, ffields) => { offset: criteria.offset, attributes: _.get(fields, 'projects', null), }, req.log) - .then(({ rows, count }) => { - const projectIds = _.map(rows, 'id'); - const promises = []; - // retrieve members - if (projectIds.length && retrieveMembers) { - promises.push( - models.ProjectMember.findAll({ - attributes: _.get(fields, 'ProjectMembers'), - where: { projectId: { $in: projectIds } }, - raw: true, - }), - ); - } - if (projectIds.length && retrieveAttachments) { - promises.push( - models.ProjectAttachment.findAll({ - attributes: PROJECT_ATTACHMENT_ATTRIBUTES, - where: { projectId: { $in: projectIds } }, - raw: true, - }), - ); - } - // return results after promise(s) have resolved - return Promise.all(promises) - .then((values) => { - const allMembers = retrieveMembers ? values.shift() : []; - const allAttachments = retrieveAttachments ? values.shift() : []; - _.forEach(rows, (fp) => { - const p = fp; - // if values length is 1 it could be either attachments or members - if (retrieveMembers) { - p.members = _.filter(allMembers, m => m.projectId === p.id); - } - if (retrieveAttachments) { - p.attachments = _.filter(allAttachments, a => a.projectId === p.id); - } + .then(({ rows, count }) => { + const projectIds = _.map(rows, 'id'); + const promises = []; + // retrieve members + if (projectIds.length && retrieveMembers) { + promises.push( + models.ProjectMember.findAll({ + attributes: _.get(fields, 'ProjectMembers'), + where: { projectId: { $in: projectIds } }, + raw: true, + }), + ); + } + if (projectIds.length && retrieveAttachments) { + promises.push( + models.ProjectAttachment.findAll({ + attributes: PROJECT_ATTACHMENT_ATTRIBUTES, + where: { projectId: { $in: projectIds } }, + raw: true, + }), + ); + } + // return results after promise(s) have resolved + return Promise.all(promises) + .then((values) => { + const allMembers = retrieveMembers ? values.shift() : []; + const allAttachments = retrieveAttachments ? values.shift() : []; + _.forEach(rows, (fp) => { + const p = fp; + // if values length is 1 it could be either attachments or members + if (retrieveMembers) { + const pMembers = _.filter(allMembers, m => m.projectId === p.id); + // check if have permission to read project members + if (util.hasPermission(PERMISSION.READ_PROJECT_MEMBER, req.authUser, pMembers)) { + if (addMembersUserId) { + // remove the userId from the returned members array if it was added before + // as it is only needed for checking permission. + _.forEach(pMembers, (m) => { + const fm = m; + delete fm.userId; + }); + } + p.members = pMembers; + } + } + if (retrieveAttachments) { + p.attachments = _.filter(allAttachments, a => a.projectId === p.id); + } + }); + return { rows, count, pageSize: criteria.limit, page: criteria.page }; }); - return { rows, count, pageSize: criteria.limit, page: criteria.page }; - }); - }); + }); }; const retrieveProjects = (req, criteria, sort, ffields) => { // order by const order = sort ? sort.split(' ') : ['createdAt', 'asc']; let fields = ffields ? ffields.split(',') : []; - // parse the fields string to determine what fields are to be returned + // parse the fields string to determine what fields are to be returned fields = util.parseFields(fields, { projects: PROJECT_ATTRIBUTES, project_members: util.addUserDetailsFieldsIfAllowed(PROJECT_MEMBER_ATTRIBUTES_ES, req), @@ -562,19 +580,62 @@ const retrieveProjects = (req, criteria, sort, ffields) => { if (_.indexOf(fields.projects, 'id') < 0) { fields.projects.push('id'); } + // add userId to project_members field so it can be used to check READ_PROJECT_MEMBER permission below. + const addMembersUserId = fields.project_members.length > 0 && _.indexOf(fields.project_members, 'userId') < 0; + if (addMembersUserId) { + fields.project_members.push('userId'); + } const searchCriteria = parseElasticSearchCriteria(criteria, fields, order) || {}; return new Promise((accept, reject) => { const es = util.getElasticSearchClient(); es.search(searchCriteria).then((docs) => { - const rows = _.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle + const rows = _.map(docs.hits.hits, single => single._source); // eslint-disable-line no-underscore-dangle + if (rows) { + if (!util.hasPermissionByReq(PERMISSION.READ_PROJECT_INVITE_NOT_OWN, req)) { + if (util.hasPermissionByReq(PERMISSION.READ_PROJECT_INVITE_OWN, req)) { + // only include own invites + const currentUserId = req.authUser.userId; + const currentUserEmail = req.authUser.email; + _.forEach(rows, (fp) => { + const invites = _.filter(fp.invites, invite => ( + (invite.userId !== null && invite.userId === currentUserId) || + (invite.email && currentUserEmail && invite.email.toLowerCase() === currentUserEmail.toLowerCase()) + )); + _.set(fp, 'invites', invites); + }); + } else { + // return empty invites + _.forEach(rows, (fp) => { + _.set(fp, 'invites', []); + }); + } + } + _.forEach(rows, (p) => { + const fp = p; + if (fp.members) { + // check if have permission to read project members + if (!util.hasPermission(PERMISSION.READ_PROJECT_MEMBER, req.authUser, fp.members)) { + delete fp.members; + } + if (fp.members && addMembersUserId) { + // remove the userId from the returned members array if it was added before + // as it is only needed for checking permission. + _.forEach(fp.members, (m) => { + const fm = m; + delete fm.userId; + }); + } + } + }); + } accept({ rows, count: docs.hits.total, pageSize: criteria.limit, page: criteria.page }); }).catch(reject); }); }; module.exports = [ - /** + /* * GET projects/ * Return a list of projects that match the criteria */ @@ -616,28 +677,28 @@ module.exports = [ if (!memberOnly && util.hasPermission(PERMISSION.READ_PROJECT_ANY, req.authUser)) { // admins & topcoder managers can see all projects return retrieveProjects(req, criteria, sort, req.query.fields) - .then((result) => { - if (result.rows.length === 0) { - req.log.debug('No projects found in ES'); - - // if we have some filters and didn't get any data from ES - // we don't fallback to DB, because DB doesn't support all of the filters - // so we don't want DB to return unrelated data, ref issue #450 - if (_.intersection(_.keys(filters), SUPPORTED_FILTERS).length > 0) { - req.log.debug('Don\'t fallback to DB because some filters are defined.'); - return util.setPaginationHeaders(req, res, - util.postProcessInvites('$.rows[*].invites[?(@.email)]', result, req)); + .then((result) => { + if (result.rows.length === 0) { + req.log.debug('No projects found in ES'); + + // if we have some filters and didn't get any data from ES + // we don't fallback to DB, because DB doesn't support all of the filters + // so we don't want DB to return unrelated data, ref issue #450 + if (_.intersection(_.keys(filters), SUPPORTED_FILTERS).length > 0) { + req.log.debug('Don\'t fallback to DB because some filters are defined.'); + return util.setPaginationHeaders(req, res, + util.postProcessInvites('$.rows[*].invites[?(@.email)]', result, req)); + } + + return retrieveProjectsFromDB(req, criteria, sort, req.query.fields) + .then(r => util.setPaginationHeaders(req, res, + util.postProcessInvites('$.rows[*].invites[?(@.email)]', r, req))); } - - return retrieveProjectsFromDB(req, criteria, sort, req.query.fields) - .then(r => util.setPaginationHeaders(req, res, - util.postProcessInvites('$.rows[*].invites[?(@.email)]', r, req))); - } - req.log.debug('Projects found in ES'); - // set header - return util.setPaginationHeaders(req, res, - util.postProcessInvites('$.rows[*].invites[?(@.email)]', result, req)); - }) + req.log.debug('Projects found in ES'); + // set header + return util.setPaginationHeaders(req, res, + util.postProcessInvites('$.rows[*].invites[?(@.email)]', result, req)); + }) .catch(err => next(err)); } @@ -654,17 +715,30 @@ module.exports = [ // so we don't want DB to return unrelated data, ref issue #450 if (_.intersection(_.keys(filters), SUPPORTED_FILTERS).length > 0) { req.log.debug('Don\'t fallback to DB because some filters are defined.'); - return util.setPaginationHeaders(req, res, - util.postProcessInvites('$.rows[*].invites[?(@.email)]', result, req)); + + return result; } - return retrieveProjectsFromDB(req, criteria, sort, req.query.fields) - .then(r => util.setPaginationHeaders(req, res, - util.postProcessInvites('$.rows[*].invites[?(@.email)]', r, req))); + return retrieveProjectsFromDB(req, criteria, sort, req.query.fields); } + req.log.debug('Projects found in ES'); - return util.setPaginationHeaders(req, res, - util.postProcessInvites('$.rows[*].invites[?(@.email)]', result, req)); + + return result; + }).then((result) => { + const postProcessedResult = util.postProcessInvites('$.rows[*].invites[?(@.email)]', result, req); + + postProcessedResult.rows.forEach((project) => { + // filter out attachments which user cannot see + if (project.attachments) { + // eslint-disable-next-line no-param-reassign + project.attachments = project.attachments.filter(attachment => + permissionUtils.hasReadAccessToAttachment(attachment, req), + ); + } + }); + + return util.setPaginationHeaders(req, res, postProcessedResult); }) .catch(err => next(err)); }, diff --git a/src/routes/projects/list.spec.js b/src/routes/projects/list.spec.js index e454a181..7e00c2f8 100644 --- a/src/routes/projects/list.spec.js +++ b/src/routes/projects/list.spec.js @@ -405,24 +405,70 @@ describe('LIST Project', () => { }); }); + it('should return the project with empty invites using M2M token without "read:project-invites" scope', (done) => { + request(server) + .get('/v5/projects') + .set({ + Authorization: `Bearer ${testUtil.m2m['read:projects']}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.have.lengthOf(3); + resJson.forEach((project) => { + project.invites.should.be.empty; + }); + done(); + } + }); + }); + + it('should not include the project members using M2M token without "read:project-members" scope', (done) => { + request(server) + .get('/v5/projects') + .set({ + Authorization: `Bearer ${testUtil.m2m['read:projects']}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.have.lengthOf(3); + resJson.forEach((project) => { + should.not.exist(project.members); + }); + done(); + } + }); + }); + it('should return the project when project that is in reviewed state in which the copilot is its member or has been invited', (done) => { request(server) - .get('/v5/projects') - .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.have.lengthOf(2); - done(); - } - }); + .get('/v5/projects') + .set({ + Authorization: `Bearer ${testUtil.jwts.copilot}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.have.lengthOf(2); + done(); + } + }); }); it('should return the project for administrator ', (done) => { @@ -1130,9 +1176,9 @@ describe('LIST Project', () => { should.exist(resJson); resJson.should.have.lengthOf(1); resJson[0].name.should.equal('test1'); - resJson[0].invites.should.have.lengthOf(2); + resJson[0].invites.should.have.lengthOf(1); resJson[0].invites[0].should.have.property('email'); - resJson[0].invites[1].email.should.equal('h***o@w***d.com'); + resJson[0].invites[0].userId.should.equal(40051335); done(); } }); @@ -1161,246 +1207,246 @@ describe('LIST Project', () => { describe('URL Query fields', () => { it('should not return "email" for project members when "fields" query param is not defined (to non-admin users)', (done) => { request(server) - .get('/v5/projects/') - .set({ - Authorization: `Bearer ${testUtil.jwts.member2}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.have.lengthOf(1); - resJson[0].members[0].should.not.have.property('email'); - done(); - } - }); + .get('/v5/projects/') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.have.lengthOf(1); + resJson[0].members[0].should.not.have.property('email'); + done(); + } + }); }); it('should not return "email" for project members even if it\'s listed in "fields" query param (to non-admin users)', (done) => { request(server) - .get('/v5/projects/?fields=members.email,members.id') - .set({ - Authorization: `Bearer ${testUtil.jwts.member2}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.have.lengthOf(1); - resJson[0].members[0].should.not.have.property('email'); - done(); - } - }); + .get('/v5/projects/?fields=members.email,members.id') + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.have.lengthOf(1); + resJson[0].members[0].should.not.have.property('email'); + done(); + } + }); }); it('should not return "cancelReason" if it is not listed in "fields" query param ', (done) => { request(server) - .get('/v5/projects/?fields=description') - .set({ - Authorization: `Bearer ${testUtil.jwts.member2}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson.should.have.lengthOf(1); - resJson[0].should.have.property('description'); - resJson[0].should.not.have.property('cancelReason'); - resJson[0].description.should.be.eq('test project1 abc/d'); - done(); - } - }); + .get('/v5/projects/?fields=description') + .set({ + Authorization: `Bearer ${testUtil.jwts.member2}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson.should.have.lengthOf(1); + resJson[0].should.have.property('description'); + resJson[0].should.not.have.property('cancelReason'); + resJson[0].description.should.be.eq('test project1 abc/d'); + done(); + } + }); }); it('should not return "email" for project members when it is not listed in "fields" query param (to admin users)', (done) => { request(server) - .get('/v5/projects/?fields=description,members.id') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - const project = _.find(resJson, p => p.id === project1.id); - const member = _.find(project.members, m => m.id === 1); - member.should.not.have.property('email'); - done(); - } - }); + .get('/v5/projects/?fields=description,members.id') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + const project = _.find(resJson, p => p.id === project1.id); + const member = _.find(project.members, m => m.id === 1); + member.should.not.have.property('email'); + done(); + } + }); }); it('should return "email" for project members if it\'s listed in "fields" query param (to admin users)', (done) => { request(server) - .get('/v5/projects/?fields=description,members.id,members.email') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - const project = _.find(resJson, p => p.id === project1.id); - const member = _.find(project.members, m => m.id === 1); - member.should.have.property('email'); - member.email.should.be.eq('test@test.com'); - done(); - } - }); + .get('/v5/projects/?fields=description,members.id,members.email') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + const project = _.find(resJson, p => p.id === project1.id); + const member = _.find(project.members, m => m.id === 1); + member.should.have.property('email'); + member.email.should.be.eq('test@test.com'); + done(); + } + }); }); it('should only return "id" field, when it\'s the only fields listed in "fields" query param', (done) => { request(server) - .get('/v5/projects/?fields=id') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - resJson[0].should.have.property('id'); - _.keys(resJson[0]).length.should.be.eq(1); - done(); - } - }); + .get('/v5/projects/?fields=id') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + resJson[0].should.have.property('id'); + _.keys(resJson[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "invites.userId" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get('/v5/projects/?fields=invites.userId') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - const project = _.find(resJson, p => p.id === project1.id); - project.invites[0].should.have.property('userId'); - _.keys(project.invites[0]).length.should.be.eq(1); - done(); - } - }); + .get('/v5/projects/?fields=invites.userId') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + const project = _.find(resJson, p => p.id === project1.id); + project.invites[0].should.have.property('userId'); + _.keys(project.invites[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "members.role" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get('/v5/projects/?fields=members.role') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - const project = _.find(resJson, p => p.id === project1.id); - project.members[0].should.have.property('role'); - _.keys(project.members[0]).length.should.be.eq(1); - done(); - } - }); + .get('/v5/projects/?fields=members.role') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + const project = _.find(resJson, p => p.id === project1.id); + project.members[0].should.have.property('role'); + _.keys(project.members[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "attachments.title" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get('/v5/projects/?fields=attachments.title') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - const project = _.find(resJson, p => p.id === project1.id); - project.attachments[0].should.have.property('title'); - _.keys(project.attachments[0]).length.should.be.eq(1); - done(); - } - }); + .get('/v5/projects/?fields=attachments.title') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + const project = _.find(resJson, p => p.id === project1.id); + project.attachments[0].should.have.property('title'); + _.keys(project.attachments[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "phases.name" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get('/v5/projects/?fields=phases.name') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - const project = _.find(resJson, p => p.id === project1.id); - project.phases[0].should.have.property('name'); - _.keys(project.phases[0]).length.should.be.eq(1); - done(); - } - }); + .get('/v5/projects/?fields=phases.name') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + const project = _.find(resJson, p => p.id === project1.id); + project.phases[0].should.have.property('name'); + _.keys(project.phases[0]).length.should.be.eq(1); + done(); + } + }); }); it('should only return "phases.products.name" field, when it\'s the only field listed in "fields" query param', (done) => { request(server) - .get('/v5/projects/?fields=phases.products.name') - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err, res) => { - if (err) { - done(err); - } else { - const resJson = res.body; - should.exist(resJson); - const project = _.find(resJson, p => p.id === project1.id); - project.phases[0].products[0].should.have.property('name'); - _.keys(project.phases[0].products[0]).length.should.be.eq(1); - done(); - } - }); + .get('/v5/projects/?fields=phases.products.name') + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) { + done(err); + } else { + const resJson = res.body; + should.exist(resJson); + const project = _.find(resJson, p => p.id === project1.id); + project.phases[0].products[0].should.have.property('name'); + _.keys(project.phases[0].products[0]).length.should.be.eq(1); + done(); + } + }); }); it('should find a project by quoted keyword with a special symbol in the name', (done) => { diff --git a/src/routes/projects/update.js b/src/routes/projects/update.js index 5dcfa46b..83226638 100644 --- a/src/routes/projects/update.js +++ b/src/routes/projects/update.js @@ -74,7 +74,7 @@ const updateProjectValdiations = { users: Joi.array().items(Joi.number().positive()), groups: Joi.array().items(Joi.number().positive()), })).allow(null), - // cancel reason is mandatory when project status is cancelled + // cancel reason is mandatory when project status is cancelled cancelReason: Joi.when('status', { is: PROJECT_STATUS.CANCELLED, then: Joi.string().required(), @@ -143,8 +143,12 @@ const validateUpdates = (existingProject, updatedProps, req) => { // } } if (_.has(updatedProps, 'directProjectId') && - !util.hasPermissionByReq(PERMISSION.UPDATE_PROJECT_DIRECT_PROJECT_ID, req)) { - errors.push('Don\'t have permission to update \'directProjectId\' property'); + !util.hasPermissionByReq(PERMISSION.MANAGE_PROJECT_DIRECT_PROJECT_ID, req)) { + errors.push('You do not have permission to update \'directProjectId\' property'); + } + if (_.has(updatedProps, 'billingAccountId') && + !util.hasPermissionByReq(PERMISSION.MANAGE_PROJECT_BILLING_ACCOUNT_ID, req)) { + errors.push('You do not have permission to update \'billingAccountId\' property'); } if ((existingProject.status !== PROJECT_STATUS.DRAFT) && (updatedProps.status === PROJECT_STATUS.DRAFT)) { errors.push('cannot update a project status to draft'); @@ -156,7 +160,7 @@ module.exports = [ // handles request validations validate(updateProjectValdiations), permissions('project.edit'), - /** + /* * Validate project type to be existed. */ (req, res, next) => { @@ -175,7 +179,7 @@ module.exports = [ next(); } }, - /** + /* * POST projects/ * Create a project if the user has access */ @@ -204,7 +208,7 @@ module.exports = [ } if (!_prj.templateId) return Promise.resolve({ _prj }); return models.ProjectTemplate.getTemplate(_prj.templateId) - .then(template => Promise.resolve({ _prj, template })); + .then(template => Promise.resolve({ _prj, template })); }) .then(({ _prj, template }) => { project = _prj; diff --git a/src/routes/projects/update.spec.js b/src/routes/projects/update.spec.js index da3d605a..0ddd922b 100644 --- a/src/routes/projects/update.spec.js +++ b/src/routes/projects/update.spec.js @@ -14,7 +14,6 @@ import { PROJECT_STATUS, BUS_API_EVENT, CONNECT_NOTIFICATION_EVENT, - M2M_SCOPES, } from '../../constants'; const should = chai.should(); @@ -192,11 +191,11 @@ describe('Project', () => { }); }); - it(`should return the project using M2M token with "${M2M_SCOPES.PROJECTS.WRITE}" scope`, (done) => { + it('should return the project using M2M token with "write:projects" scope', (done) => { request(server) .patch(`/v5/projects/${project1.id}`) .set({ - Authorization: `Bearer ${testUtil.m2m[M2M_SCOPES.PROJECTS.WRITE]}`, + Authorization: `Bearer ${testUtil.m2m['write:projects']}`, }) .send({ name: 'updateProject name by M2M', @@ -584,7 +583,7 @@ describe('Project', () => { request(server) .patch(`/v5/projects/${project1.id}`) .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, + Authorization: `Bearer ${testUtil.jwts.manager}`, }) .send({ billingAccountId: 123, @@ -600,7 +599,7 @@ describe('Project', () => { should.exist(resJson); resJson.billingAccountId.should.equal(123); resJson.updatedAt.should.not.equal('2016-06-30 00:33:07+00'); - resJson.updatedBy.should.equal(40051332); + resJson.updatedBy.should.equal(40051334); server.services.pubsub.publish.calledWith('project.updated').should.be.true; done(); } @@ -611,7 +610,7 @@ describe('Project', () => { request(server) .patch(`/v5/projects/${project1.id}`) .set({ - Authorization: `Bearer ${testUtil.jwts.copilot}`, + Authorization: `Bearer ${testUtil.jwts.manager}`, }) .send({ billingAccountId: 1, @@ -659,6 +658,20 @@ describe('Project', () => { }); }); + it('should return 400 when updating billingAccountId without "write:projects-billing-accounts" scope in M2M token', + (done) => { + request(server) + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.m2m['write:projects']}`, + }) + .send({ + billingAccountId: 123, + }) + .expect('Content-Type', /json/) + .expect(400, done); + }); + it.skip('should return 200 and update bookmarks', (done) => { request(server) .patch(`/v5/projects/${project1.id}`) @@ -777,299 +790,299 @@ describe('Project', () => { it('should send correct BUS API messages when project status updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - status: PROJECT_STATUS.COMPLETED, - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - status: PROJECT_STATUS.COMPLETED, - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_COMPLETED).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051333, - initiatorUserId: 40051333, - })).should.be.true; + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + status: PROJECT_STATUS.COMPLETED, + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(3); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + status: PROJECT_STATUS.COMPLETED, + updatedBy: testUtil.userIds.admin, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_COMPLETED).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051333, + initiatorUserId: 40051333, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when project details updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - details: { - info: 'something', - }, - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - details: { info: 'something' }, - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_SPECIFICATION_MODIFIED).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051333, - initiatorUserId: 40051333, - })).should.be.true; + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + details: { + info: 'something', + }, + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(3); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + details: { info: 'something' }, + updatedBy: testUtil.userIds.admin, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_SPECIFICATION_MODIFIED).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051333, + initiatorUserId: 40051333, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when project name updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - name: 'New project name', - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - name: 'New project name', - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_SPECIFICATION_MODIFIED).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ - projectId: project1.id, - projectName: 'New project name', - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051333, - initiatorUserId: 40051333, - })).should.be.true; + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + name: 'New project name', + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(3); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + name: 'New project name', + updatedBy: testUtil.userIds.admin, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_SPECIFICATION_MODIFIED).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ + projectId: project1.id, + projectName: 'New project name', + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051333, + initiatorUserId: 40051333, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when project description updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - description: 'Updated description', - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - description: 'Updated description', - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_SPECIFICATION_MODIFIED).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051333, - initiatorUserId: 40051333, - })).should.be.true; + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + description: 'Updated description', + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(3); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + description: 'Updated description', + updatedBy: testUtil.userIds.admin, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_SPECIFICATION_MODIFIED).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051333, + initiatorUserId: 40051333, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when project bookmarks updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - bookmarks: [{ - title: 'title1', - address: 'http://someurl.com', - }], - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - bookmarks: [{ title: 'title1', address: 'http://someurl.com' }], - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_LINK_CREATED).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ - projectId: project1.id, - projectName: project1.name, - projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, - userId: 40051333, - initiatorUserId: 40051333, - })).should.be.true; + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + bookmarks: [{ + title: 'title1', + address: 'http://someurl.com', + }], + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(3); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + bookmarks: [{ title: 'title1', address: 'http://someurl.com' }], + updatedBy: testUtil.userIds.admin, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_LINK_CREATED).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_UPDATED, sinon.match({ + projectId: project1.id, + projectName: project1.name, + projectUrl: `https://local.topcoder-dev.com/projects/${project1.id}`, + userId: 40051333, + initiatorUserId: 40051333, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when project estimatedPrice updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - estimatedPrice: 123, - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(1); + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + estimatedPrice: 123, + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(1); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + // FIXME https://github.com/sequelize/sequelize/issues/8019 + // estimatedPrice: 123, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - // FIXME https://github.com/sequelize/sequelize/issues/8019 - // estimatedPrice: 123, - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when project actualPrice updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - actualPrice: 123, - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(1); + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + actualPrice: 123, + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(1); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + // FIXME https://github.com/sequelize/sequelize/issues/8019 + // actualPrice: 123, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - // FIXME https://github.com/sequelize/sequelize/issues/8019 - // actualPrice: 123, - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when project terms are updated', (done) => { request(server) - .patch(`/v5/projects/${project1.id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - terms: [1, 2, 3], - }) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.equal(1); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ - resource: 'project', - id: project1.id, - terms: [1, 2, 3], - updatedBy: testUtil.userIds.admin, - })).should.be.true; + .patch(`/v5/projects/${project1.id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + terms: [1, 2, 3], + }) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.equal(1); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_UPDATED, sinon.match({ + resource: 'project', + id: project1.id, + terms: [1, 2, 3], + updatedBy: testUtil.userIds.admin, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); }); }); diff --git a/src/routes/scopeChangeRequests/create.js b/src/routes/scopeChangeRequests/create.js index e63caae9..d7848498 100644 --- a/src/routes/scopeChangeRequests/create.js +++ b/src/routes/scopeChangeRequests/create.js @@ -27,7 +27,7 @@ module.exports = [ const newScope = _.get(req, 'body.newScope'); const members = req.context.currentProjectMembers; const isCustomer = !_.isUndefined(_.find(members, - m => m.userId === req.authUser.userId && m.role === PROJECT_MEMBER_ROLE.CUSTOMER)); + m => m.userId === req.authUser.userId && m.role === PROJECT_MEMBER_ROLE.CUSTOMER)); const scopeChange = { oldScope, @@ -42,44 +42,44 @@ module.exports = [ where: { id: projectId }, }) - .then((project) => { - if (!project) { - const err = new Error(`Project with id ${projectId} not found`); - err.status = 404; - return Promise.reject(err); - } + .then((project) => { + if (!project) { + const err = new Error(`Project with id ${projectId} not found`); + err.status = 404; + return Promise.reject(err); + } - // If the project is not frozen yet, the changes can be saved directly into projects db. - // Scope change request workflow is not required. - const statusesForNonFrozenProjects = [PROJECT_STATUS.DRAFT, PROJECT_STATUS.IN_REVIEW]; - if (statusesForNonFrozenProjects.indexOf(project.status) > -1) { - const err = new Error( - `Cannot create a scope change request for projects with statuses: ${ - statusesForNonFrozenProjects.join(', ')}`); - err.status = 403; - return Promise.reject(err); - } + // If the project is not frozen yet, the changes can be saved directly into projects db. + // Scope change request workflow is not required. + const statusesForNonFrozenProjects = [PROJECT_STATUS.DRAFT, PROJECT_STATUS.IN_REVIEW]; + if (statusesForNonFrozenProjects.indexOf(project.status) > -1) { + const err = new Error( + `Cannot create a scope change request for projects with statuses: ${ + statusesForNonFrozenProjects.join(', ')}`); + err.status = 403; + return Promise.reject(err); + } - return models.ScopeChangeRequest.findPendingScopeChangeRequest(projectId); - }) + return models.ScopeChangeRequest.findPendingScopeChangeRequest(projectId); + }) - .then((pendingScopeChangeReq) => { - if (pendingScopeChangeReq) { - const err = new Error('Cannot create a new scope change request while there is a pending request'); - err.status = 403; - return Promise.reject(err); - } + .then((pendingScopeChangeReq) => { + if (pendingScopeChangeReq) { + const err = new Error('Cannot create a new scope change request while there is a pending request'); + err.status = 403; + return Promise.reject(err); + } - req.log.debug('creating scope change request'); - return models.ScopeChangeRequest.create(scopeChange); - }) + req.log.debug('creating scope change request'); + return models.ScopeChangeRequest.create(scopeChange); + }) - .then((_newScopeChange) => { - req.log.debug('Created scope change request'); - res.json(_newScopeChange); - return Promise.resolve(); - }) + .then((_newScopeChange) => { + req.log.debug('Created scope change request'); + res.json(_newScopeChange); + return Promise.resolve(); + }) - .catch(err => next(err)); + .catch(err => next(err)); }, ]; diff --git a/src/routes/scopeChangeRequests/update.js b/src/routes/scopeChangeRequests/update.js index 1f1e8ea5..6111e248 100644 --- a/src/routes/scopeChangeRequests/update.js +++ b/src/routes/scopeChangeRequests/update.js @@ -4,11 +4,11 @@ import validate from 'express-validation'; import { middleware as tcMiddleware } from 'tc-core-library-js'; import util from '../../util'; import { - SCOPE_CHANGE_REQ_STATUS, - PROJECT_MEMBER_ROLE, - USER_ROLE, - PROJECT_MEMBER_MANAGER_ROLES, - EVENT, + SCOPE_CHANGE_REQ_STATUS, + PROJECT_MEMBER_ROLE, + USER_ROLE, + PROJECT_MEMBER_MANAGER_ROLES, + EVENT, } from '../../constants'; import models from '../../models'; @@ -84,44 +84,44 @@ module.exports = [ req.log.debug('finding scope change', requestId); return models.ScopeChangeRequest.findScopeChangeRequest(projectId, { requestId }) - .then((scopeChangeReq) => { + .then((scopeChangeReq) => { // req.log.debug(scopeChangeReq); - if (!scopeChangeReq) { - const err = new Error('Scope change request does not exist'); - err.status = 404; - return next(err); - } - const statusesForCustomers = [SCOPE_CHANGE_REQ_STATUS.APPROVED, SCOPE_CHANGE_REQ_STATUS.REJECTED]; - if (statusesForCustomers.indexOf(updatedProps.status) > -1 && !isCustomer && !isAdmin) { - const err = new Error('Only customer can approve the request'); - err.status = 401; - return next(err); - } - const statusesForManagers = [SCOPE_CHANGE_REQ_STATUS.ACTIVATED]; - if (statusesForManagers.indexOf(updatedProps.status) > -1 && !isManager && !isAdmin) { - const err = new Error('Only managers can activate the request'); - err.status = 401; - return next(err); - } - const statusesForSelf = [SCOPE_CHANGE_REQ_STATUS.CANCELED]; - const isSelf = scopeChangeReq.createdBy === req.authUser.userId; - if (statusesForSelf.indexOf(updatedProps.status) > -1 && !isSelf && !isAdmin) { - const err = new Error('One can cancel only own requests'); - err.status = 401; - return next(err); - } + if (!scopeChangeReq) { + const err = new Error('Scope change request does not exist'); + err.status = 404; + return next(err); + } + const statusesForCustomers = [SCOPE_CHANGE_REQ_STATUS.APPROVED, SCOPE_CHANGE_REQ_STATUS.REJECTED]; + if (statusesForCustomers.indexOf(updatedProps.status) > -1 && !isCustomer && !isAdmin) { + const err = new Error('Only customer can approve the request'); + err.status = 401; + return next(err); + } + const statusesForManagers = [SCOPE_CHANGE_REQ_STATUS.ACTIVATED]; + if (statusesForManagers.indexOf(updatedProps.status) > -1 && !isManager && !isAdmin) { + const err = new Error('Only managers can activate the request'); + err.status = 401; + return next(err); + } + const statusesForSelf = [SCOPE_CHANGE_REQ_STATUS.CANCELED]; + const isSelf = scopeChangeReq.createdBy === req.authUser.userId; + if (statusesForSelf.indexOf(updatedProps.status) > -1 && !isSelf && !isAdmin) { + const err = new Error('One can cancel only own requests'); + err.status = 401; + return next(err); + } - return ( - updatedProps.status === SCOPE_CHANGE_REQ_STATUS.ACTIVATED - ? updateProjectDetails(req, scopeChangeReq.newScope, projectId) - : Promise.resolve() - ) - .then(() => scopeChangeReq.update(updatedProps)) - .then((_updatedReq) => { - res.json(_updatedReq); - return Promise.resolve(); - }); - }) - .catch(err => next(err)); + return ( + updatedProps.status === SCOPE_CHANGE_REQ_STATUS.ACTIVATED + ? updateProjectDetails(req, scopeChangeReq.newScope, projectId) + : Promise.resolve() + ) + .then(() => scopeChangeReq.update(updatedProps)) + .then((_updatedReq) => { + res.json(_updatedReq); + return Promise.resolve(); + }); + }) + .catch(err => next(err)); }, ]; diff --git a/src/routes/timelines/create.js b/src/routes/timelines/create.js index cb2e09d0..bc523dcc 100644 --- a/src/routes/timelines/create.js +++ b/src/routes/timelines/create.js @@ -96,10 +96,10 @@ module.exports = [ return milestone; }); return models.Milestone.bulkCreate(milestones, { returning: true }) - .then((createdMilestones) => { - req.log.debug('Milestones created for timeline with template id %d', templateId); - result.milestones = _.map(createdMilestones, cm => _.omit(cm.toJSON(), 'deletedAt', 'deletedBy')); - }); + .then((createdMilestones) => { + req.log.debug('Milestones created for timeline with template id %d', templateId); + result.milestones = _.map(createdMilestones, cm => _.omit(cm.toJSON(), 'deletedAt', 'deletedBy')); + }); } // no milestone template found for the template req.log.debug('no milestone template found for the template id %d', templateId); @@ -110,31 +110,31 @@ module.exports = [ }) .catch(next); }) - .then(() => { + .then(() => { // Send event to bus - req.log.debug('Sending event to RabbitMQ bus for timeline %d', result.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.TIMELINE_ADDED, - _.assign({ projectId: req.params.projectId }, result), - { correlationId: req.id }, - ); + req.log.debug('Sending event to RabbitMQ bus for timeline %d', result.id); + req.app.services.pubsub.publish(EVENT.ROUTING_KEY.TIMELINE_ADDED, + _.assign({ projectId: req.params.projectId }, result), + { correlationId: req.id }, + ); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.TIMELINE_ADDED, - RESOURCES.TIMELINE, - result); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.TIMELINE_ADDED, + RESOURCES.TIMELINE, + result); - // emit the event for milestones - _.map(result.milestones, milestone => util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.MILESTONE_ADDED, - RESOURCES.MILESTONE, - milestone)); + // emit the event for milestones + _.map(result.milestones, milestone => util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.MILESTONE_ADDED, + RESOURCES.MILESTONE, + milestone)); - // Write to the response - res.status(201).json(result); - return Promise.resolve(); - }) - .catch(next); + // Write to the response + res.status(201).json(result); + return Promise.resolve(); + }) + .catch(next); }, ]; diff --git a/src/routes/timelines/delete.js b/src/routes/timelines/delete.js index 03e5e7d7..7a8af7eb 100644 --- a/src/routes/timelines/delete.js +++ b/src/routes/timelines/delete.js @@ -45,31 +45,31 @@ module.exports = [ limit: itemsDeleted, })), ) - .then((milestones) => { + .then((milestones) => { // Send event to bus - req.log.debug('Sending event to RabbitMQ bus for timeline %d', deleted.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.TIMELINE_REMOVED, - deleted, - { correlationId: req.id }, - ); + req.log.debug('Sending event to RabbitMQ bus for timeline %d', deleted.id); + req.app.services.pubsub.publish(EVENT.ROUTING_KEY.TIMELINE_REMOVED, + deleted, + { correlationId: req.id }, + ); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.TIMELINE_REMOVED, - RESOURCES.TIMELINE, - { id: req.params.timelineId }); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.TIMELINE_REMOVED, + RESOURCES.TIMELINE, + { id: req.params.timelineId }); - // emit the event for milestones - _.map(milestones, milestone => util.sendResourceToKafkaBus(req, - EVENT.ROUTING_KEY.MILESTONE_REMOVED, - RESOURCES.MILESTONE, - milestone.toJSON())); + // emit the event for milestones + _.map(milestones, milestone => util.sendResourceToKafkaBus(req, + EVENT.ROUTING_KEY.MILESTONE_REMOVED, + RESOURCES.MILESTONE, + milestone.toJSON())); - // Write to response - res.status(204).end(); - return Promise.resolve(); - }) - .catch(next); + // Write to response + res.status(204).end(); + return Promise.resolve(); + }) + .catch(next); }, ]; diff --git a/src/routes/timelines/delete.spec.js b/src/routes/timelines/delete.spec.js index e082578c..d75b47ad 100644 --- a/src/routes/timelines/delete.spec.js +++ b/src/routes/timelines/delete.spec.js @@ -14,27 +14,27 @@ const should = chai.should(); // eslint-disable-line no-unused-vars const expectAfterDelete = (id, err, next) => { if (err) throw err; setTimeout(() => - models.Timeline.findOne({ - where: { - id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.Timeline.findOne({ + where: { + id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/timelines/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/timelines/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; describe('DELETE timeline', () => { diff --git a/src/routes/timelines/get.js b/src/routes/timelines/get.js index f5145ffa..3d62909d 100644 --- a/src/routes/timelines/get.js +++ b/src/routes/timelines/get.js @@ -53,16 +53,16 @@ module.exports = [ type: ES_TIMELINE_TYPE, id: req.params.timelineId, }) - .then((doc) => { - req.log.debug('timeline found in ES'); - return res.json(doc._source); // eslint-disable-line no-underscore-dangle - }) - .catch((err) => { - if (err.status === 404) { - req.log.debug('No timeline found in ES'); - return loadMilestones(req.timeline).then(timeline => res.json(timeline)); - } - return next(err); - }); + .then((doc) => { + req.log.debug('timeline found in ES'); + return res.json(doc._source); // eslint-disable-line no-underscore-dangle + }) + .catch((err) => { + if (err.status === 404) { + req.log.debug('No timeline found in ES'); + return loadMilestones(req.timeline).then(timeline => res.json(timeline)); + } + return next(err); + }); }, ]; diff --git a/src/routes/timelines/get.spec.js b/src/routes/timelines/get.spec.js index 82ac3b50..001c7324 100644 --- a/src/routes/timelines/get.spec.js +++ b/src/routes/timelines/get.spec.js @@ -186,7 +186,7 @@ describe('GET timeline', () => { .then(createdTimelines => ( // create milestones after timelines models.Milestone.bulkCreate(milestones)) - .then(createdMilestones => [createdTimelines, createdMilestones]), + .then(createdMilestones => [createdTimelines, createdMilestones]), ), ).then(([createdTimelines, createdMilestones]) => // Index to ES diff --git a/src/routes/timelines/list.js b/src/routes/timelines/list.js index d9ce06f4..33f06a90 100644 --- a/src/routes/timelines/list.js +++ b/src/routes/timelines/list.js @@ -45,22 +45,22 @@ function retrieveTimelines(esTerms) { */ function retrieveTimelinesFromDB(req, filters) { return models.Timeline.search(filters, req.log) - .then((timelines) => { - const timelineIds = _.map(timelines, 'id'); + .then((timelines) => { + const timelineIds = _.map(timelines, 'id'); - // retrieve milestones - return models.Milestone.findAll({ - attributes: MILESTONE_ATTRIBUTES, - where: { timelineId: { $in: timelineIds } }, - raw: true, - }) - .then((values) => { - _.forEach(timelines, (t) => { - t.milestones = _.filter(values, m => m.timelineId === t.id); // eslint-disable-line no-param-reassign - }); - return timelines; + // retrieve milestones + return models.Milestone.findAll({ + attributes: MILESTONE_ATTRIBUTES, + where: { timelineId: { $in: timelineIds } }, + raw: true, + }) + .then((values) => { + _.forEach(timelines, (t) => { + t.milestones = _.filter(values, m => m.timelineId === t.id); // eslint-disable-line no-param-reassign + }); + return timelines; + }); }); - }); } const permissions = tcMiddleware.permissions; diff --git a/src/routes/timelines/list.spec.js b/src/routes/timelines/list.spec.js index ffed6389..04a9640e 100644 --- a/src/routes/timelines/list.spec.js +++ b/src/routes/timelines/list.spec.js @@ -149,43 +149,43 @@ describe('LIST timelines', () => { }, ]).then(() => // Create phase - models.ProjectPhase.bulkCreate([ - { - projectId: 1, - name: 'test project phase 1', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json 2', - }, - createdBy: 1, - updatedBy: 1, - }, - { - projectId: 2, - name: 'test project phase 2', - status: 'active', - startDate: '2018-05-16T00:00:00Z', - endDate: '2018-05-16T12:00:00Z', - budget: 21.0, - progress: 1.234567, - details: { - message: 'This can be any json 2', - }, - createdBy: 2, - updatedBy: 2, - }, - ])) + models.ProjectPhase.bulkCreate([ + { + projectId: 1, + name: 'test project phase 1', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json 2', + }, + createdBy: 1, + updatedBy: 1, + }, + { + projectId: 2, + name: 'test project phase 2', + status: 'active', + startDate: '2018-05-16T00:00:00Z', + endDate: '2018-05-16T12:00:00Z', + budget: 21.0, + progress: 1.234567, + details: { + message: 'This can be any json 2', + }, + createdBy: 2, + updatedBy: 2, + }, + ])) .then(() => // Create timelines models.Timeline.bulkCreate(timelines, { returning: true }) .then(createdTimelines => ( // create milestones after timelines models.Milestone.bulkCreate(milestones)) - .then(createdMilestones => [createdTimelines, createdMilestones]), + .then(createdMilestones => [createdTimelines, createdMilestones]), ), ).then(([createdTimelines, createdMilestones]) => // Index to ES diff --git a/src/routes/workItems/create.js b/src/routes/workItems/create.js index f53ef1b4..0852a26d 100644 --- a/src/routes/workItems/create.js +++ b/src/routes/workItems/create.js @@ -76,64 +76,64 @@ module.exports = [ raw: true, }); }) - .then((existingProject) => { + .then((existingProject) => { // make sure project exists - if (!existingProject) { - const err = new Error(`project not found for project id ${projectId}`); - err.status = 404; - throw err; - } + if (!existingProject) { + const err = new Error(`project not found for project id ${projectId}`); + err.status = 404; + throw err; + } - _.assign(data, { - phaseId, - projectId, - directProjectId: existingProject.directProjectId, - billingAccountId: existingProject.billingAccountId, - }); - - return models.PhaseProduct.count({ - where: { - projectId, + _.assign(data, { phaseId, - deletedAt: { $eq: null }, - }, - raw: true, - }); - }) - .then((productCount) => { + projectId, + directProjectId: existingProject.directProjectId, + billingAccountId: existingProject.billingAccountId, + }); + + return models.PhaseProduct.count({ + where: { + projectId, + phaseId, + deletedAt: { $eq: null }, + }, + raw: true, + }); + }) + .then((productCount) => { // make sure number of products of per phase <= max value - if (productCount >= 100) { - const err = new Error('the number of products per phase cannot exceed ' + + if (productCount >= 100) { + const err = new Error('the number of products per phase cannot exceed ' + `${100}`); - err.status = 400; - throw err; - } - return models.PhaseProduct.create(data) - .then((_newPhaseProduct) => { - newPhaseProduct = _.cloneDeep(_newPhaseProduct); - req.log.debug('new work created (id# %d, name: %s)', - newPhaseProduct.id, newPhaseProduct.name); - newPhaseProduct = newPhaseProduct.get({ plain: true }); - newPhaseProduct = _.omit(newPhaseProduct, ['deletedAt', 'utm']); - }); - })) - .then(() => { + err.status = 400; + throw err; + } + return models.PhaseProduct.create(data) + .then((_newPhaseProduct) => { + newPhaseProduct = _.cloneDeep(_newPhaseProduct); + req.log.debug('new work created (id# %d, name: %s)', + newPhaseProduct.id, newPhaseProduct.name); + newPhaseProduct = newPhaseProduct.get({ plain: true }); + newPhaseProduct = _.omit(newPhaseProduct, ['deletedAt', 'utm']); + }); + })) + .then(() => { // Send events to buses - req.log.debug('Sending event to RabbitMQ bus for phase product %d', newPhaseProduct.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, - newPhaseProduct, - { correlationId: req.id }, - ); - req.log.debug('Sending event to Kafka bus for phase product %d', newPhaseProduct.id); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, - RESOURCES.PHASE_PRODUCT, - newPhaseProduct); + req.log.debug('Sending event to RabbitMQ bus for phase product %d', newPhaseProduct.id); + req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, + newPhaseProduct, + { correlationId: req.id }, + ); + req.log.debug('Sending event to Kafka bus for phase product %d', newPhaseProduct.id); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_ADDED, + RESOURCES.PHASE_PRODUCT, + newPhaseProduct); - res.status(201).json(newPhaseProduct); - }) - .catch((err) => { next(err); }); + res.status(201).json(newPhaseProduct); + }) + .catch((err) => { next(err); }); }, ]; diff --git a/src/routes/workItems/create.spec.js b/src/routes/workItems/create.spec.js index 0e7e3482..8e447acc 100644 --- a/src/routes/workItems/create.spec.js +++ b/src/routes/workItems/create.spec.js @@ -62,92 +62,92 @@ describe('CREATE Work Item', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { - models.WorkManagementPermission.create({ - policy: 'workItem.create', - permission: { - allowRule: { - projectRoles: ['customer', 'copilot'], - topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + .then((template) => { + models.WorkManagementPermission.create({ + policy: 'workItem.create', + permission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + }, + denyRule: { projectRoles: ['copilot'] }, }, - denyRule: { projectRoles: ['copilot'] }, - }, - projectTemplateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then(() => { - // Create projects - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId: template.id, + projectTemplateId: template.id, details: {}, createdBy: 1, updatedBy: 1, lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, + .then(() => { + // Create projects + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId: template.id, + details: {}, createdBy: 1, updatedBy: 1, - projectId, - }).then((phase) => { - workId = phase.id; - models.PhaseWorkStream.create({ - phaseId: workId, - workStreamId, - }).then(() => { - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then((project) => { + projectId = project.id; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', projectId, - role: 'copilot', - isPrimary: false, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => done()); + }).then((entity) => { + workStreamId = entity.id; + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, + createdBy: 1, + updatedBy: 1, + projectId, + }).then((phase) => { + workId = phase.id; + models.PhaseWorkStream.create({ + phaseId: workId, + workStreamId, + }).then(() => { + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => done()); + }); + }); + }); }); - }); }); - }); }); - }); }); }); @@ -316,28 +316,28 @@ describe('CREATE Work Item', () => { it('should send correct BUS API messages when work item created', (done) => { request(server) - .post(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}/workitems`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .send(body) - .expect('Content-Type', /json/) - .expect(201) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); + .post(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}/workitems`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .send(body) + .expect('Content-Type', /json/) + .expect(201) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_CREATED, sinon.match({ - resource: RESOURCES.PHASE_PRODUCT, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_CREATED, sinon.match({ + resource: RESOURCES.PHASE_PRODUCT, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); }); }); diff --git a/src/routes/workItems/delete.js b/src/routes/workItems/delete.js index bab03805..6c561fd4 100644 --- a/src/routes/workItems/delete.js +++ b/src/routes/workItems/delete.js @@ -32,49 +32,49 @@ module.exports = [ const productId = _.parseInt(req.params.id); models.sequelize.transaction(() => - models.ProjectPhase.findOne({ - where: { - id: phaseId, - }, - include: [{ - model: models.WorkStream, + models.ProjectPhase.findOne({ where: { - id: workStreamId, - projectId, + id: phaseId, }, - }, - ], - }) - .then((existing) => { - if (!existing) { - // handle 404 - const err = new Error('No active work item found for project id ' + + include: [{ + model: models.WorkStream, + where: { + id: workStreamId, + projectId, + }, + }, + ], + }) + .then((existing) => { + if (!existing) { + // handle 404 + const err = new Error('No active work item found for project id ' + `${projectId}, phase id ${phaseId} and work stream id ${workStreamId}`); - err.status = 404; - return Promise.reject(err); - } + err.status = 404; + return Promise.reject(err); + } - // soft delete the record - return models.PhaseProduct.findOne({ - where: { - id: productId, - projectId, - phaseId, - deletedAt: { $eq: null }, - }, - }); - }) - .then((existing) => { - if (!existing) { + // soft delete the record + return models.PhaseProduct.findOne({ + where: { + id: productId, + projectId, + phaseId, + deletedAt: { $eq: null }, + }, + }); + }) + .then((existing) => { + if (!existing) { // handle 404 - const err = new Error('No active work item found for project id ' + + const err = new Error('No active work item found for project id ' + `${projectId}, phase id ${phaseId} and product id ${productId}`); - err.status = 404; - return Promise.reject(err); - } - return existing.update({ deletedBy: req.authUser.userId }); - }) - .then(entity => entity.destroy())) + err.status = 404; + return Promise.reject(err); + } + return existing.update({ deletedBy: req.authUser.userId }); + }) + .then(entity => entity.destroy())) .then((deleted) => { req.log.debug('deleted work item', JSON.stringify(deleted, null, 2)); diff --git a/src/routes/workItems/delete.spec.js b/src/routes/workItems/delete.spec.js index f9e98731..6c93a78c 100644 --- a/src/routes/workItems/delete.spec.js +++ b/src/routes/workItems/delete.spec.js @@ -19,29 +19,29 @@ chai.should(); const expectAfterDelete = (projectId, workStreamId, phaseId, id, err, next) => { if (err) throw err; setTimeout(() => - models.PhaseProduct.findOne({ - where: { - id, - projectId, - phaseId, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.PhaseProduct.findOne({ + where: { + id, + projectId, + phaseId, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${phaseId}/workitems/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${phaseId}/workitems/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; const body = { name: 'test phase product', @@ -93,97 +93,97 @@ describe('DELETE Work Item', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { - models.WorkManagementPermission.create({ - policy: 'workItem.delete', - permission: { - allowRule: { - projectRoles: ['customer', 'copilot'], - topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + .then((template) => { + models.WorkManagementPermission.create({ + policy: 'workItem.delete', + permission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + }, + denyRule: { projectRoles: ['copilot'] }, }, - denyRule: { projectRoles: ['copilot'] }, - }, - projectTemplateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then(() => { - // Create projects - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId: template.id, + projectTemplateId: template.id, details: {}, createdBy: 1, updatedBy: 1, lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, + .then(() => { + // Create projects + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId: template.id, + details: {}, createdBy: 1, updatedBy: 1, - projectId, - }).then((phase) => { - workId = phase.id; - models.PhaseWorkStream.create({ - phaseId: workId, - workStreamId, - }) - .then(() => { - _.assign(body, { phaseId: workId, projectId }); - models.PhaseProduct.create(body).then((product) => { - productId = product.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then((project) => { + projectId = project.id; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + workStreamId = entity.id; + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => done()); + }).then((phase) => { + workId = phase.id; + models.PhaseWorkStream.create({ + phaseId: workId, + workStreamId, + }) + .then(() => { + _.assign(body, { phaseId: workId, projectId }); + models.PhaseProduct.create(body).then((product) => { + productId = product.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => done()); + }); + }); + }); }); }); - }); }); - }); }); - }); }); }); @@ -265,26 +265,26 @@ describe('DELETE Work Item', () => { it('should send correct BUS API messages when work item removed', (done) => { request(server) - .delete(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}/workitems/${productId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .expect(204) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); + .delete(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}/workitems/${productId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_DELETED, sinon.match({ - resource: RESOURCES.PHASE_PRODUCT, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_DELETED, sinon.match({ + resource: RESOURCES.PHASE_PRODUCT, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); }); }); diff --git a/src/routes/workItems/get.js b/src/routes/workItems/get.js index 44d20716..d2f4f8fe 100644 --- a/src/routes/workItems/get.js +++ b/src/routes/workItems/get.js @@ -42,33 +42,33 @@ module.exports = [ }, ], }) - .then((existing) => { - if (!existing) { + .then((existing) => { + if (!existing) { // handle 404 - const err = new Error('No active work item found for project id ' + + const err = new Error('No active work item found for project id ' + `${projectId}, phase id ${phaseId} and work stream id ${workStreamId}`); - err.status = 404; - return Promise.reject(err); - } + err.status = 404; + return Promise.reject(err); + } - return models.PhaseProduct.findOne({ - where: { - id: productId, - projectId, - phaseId, - deletedAt: { $eq: null }, - }, - }); - }).then((product) => { - if (!product) { + return models.PhaseProduct.findOne({ + where: { + id: productId, + projectId, + phaseId, + deletedAt: { $eq: null }, + }, + }); + }).then((product) => { + if (!product) { // handle 404 - const err = new Error('phase product not found for project id ' + + const err = new Error('phase product not found for project id ' + `${projectId}, phase id ${phaseId} and product id ${productId}`); - err.status = 404; - throw err; - } else { - res.json(product); - } - }).catch(err => next(err)); + err.status = 404; + throw err; + } else { + res.json(product); + } + }).catch(err => next(err)); }, ]; diff --git a/src/routes/workItems/get.spec.js b/src/routes/workItems/get.spec.js index b3acd08c..121e4747 100644 --- a/src/routes/workItems/get.spec.js +++ b/src/routes/workItems/get.spec.js @@ -74,66 +74,66 @@ describe('GET Work Item', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]) - .then(() => { - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', + .then((project) => { + projectId = project.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, projectId, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - workId = phase.id; - models.PhaseWorkStream.create({ - phaseId: workId, - workStreamId, - }) - .then(() => { - _.assign(body, { phaseId: workId, projectId }); - models.PhaseProduct.create(body).then((product) => { - productId = product.id; - done(); + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]) + .then(() => { + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + workStreamId = entity.id; + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, + createdBy: 1, + updatedBy: 1, + projectId, + }).then((phase) => { + workId = phase.id; + models.PhaseWorkStream.create({ + phaseId: workId, + workStreamId, + }) + .then(() => { + _.assign(body, { phaseId: workId, projectId }); + models.PhaseProduct.create(body).then((product) => { + productId = product.id; + done(); + }); + }); }); }); }); - }); }); - }); }); }); }); diff --git a/src/routes/workItems/list.js b/src/routes/workItems/list.js index b9dd656d..ad17ffd6 100644 --- a/src/routes/workItems/list.js +++ b/src/routes/workItems/list.js @@ -41,23 +41,23 @@ module.exports = [ }, ], }) - .then((existing) => { - if (!existing) { + .then((existing) => { + if (!existing) { // handle 404 - const err = new Error('No active phase product found for project id ' + + const err = new Error('No active phase product found for project id ' + `${projectId}, work stream id ${workStreamId} and phase id ${phaseId}`); - err.status = 404; - throw err; - } + err.status = 404; + throw err; + } - return models.PhaseProduct.findAll({ - where: { - phaseId, - projectId, - }, - }); - }) - .then(products => res.json(products)) - .catch(err => next(err)); + return models.PhaseProduct.findAll({ + where: { + phaseId, + projectId, + }, + }); + }) + .then(products => res.json(products)) + .catch(err => next(err)); }, ]; diff --git a/src/routes/workItems/list.spec.js b/src/routes/workItems/list.spec.js index bb2cd9fb..2147f6e1 100644 --- a/src/routes/workItems/list.spec.js +++ b/src/routes/workItems/list.spec.js @@ -73,63 +73,63 @@ describe('LIST Work Items', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]) - .then(() => { - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', + .then((project) => { + projectId = project.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, projectId, + role: 'copilot', + isPrimary: false, createdBy: 1, updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - workId = phase.id; - models.PhaseWorkStream.create({ - phaseId: workId, - workStreamId, - }) - .then(() => { - _.assign(body, { phaseId: workId, projectId }); - models.PhaseProduct.create(body).then(() => done()); + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]) + .then(() => { + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + workStreamId = entity.id; + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, + createdBy: 1, + updatedBy: 1, + projectId, + }).then((phase) => { + workId = phase.id; + models.PhaseWorkStream.create({ + phaseId: workId, + workStreamId, + }) + .then(() => { + _.assign(body, { phaseId: workId, projectId }); + models.PhaseProduct.create(body).then(() => done()); + }); + }); }); }); - }); }); - }); }); }); }); diff --git a/src/routes/workItems/update.js b/src/routes/workItems/update.js index d22e00bd..77daab17 100644 --- a/src/routes/workItems/update.js +++ b/src/routes/workItems/update.js @@ -62,58 +62,58 @@ module.exports = [ }, ], }) - .then((existingWork) => { - if (!existingWork) { + .then((existingWork) => { + if (!existingWork) { // handle 404 - const err = new Error('No active work item found for project id ' + + const err = new Error('No active work item found for project id ' + `${projectId}, phase id ${phaseId} and work stream id ${workStreamId}`); - err.status = 404; - return Promise.reject(err); - } + err.status = 404; + return Promise.reject(err); + } - return models.PhaseProduct.findOne({ - where: { - id: productId, - projectId, - phaseId, - deletedAt: { $eq: null }, - }, - }); - }) - .then((existing) => { - if (!existing) { + return models.PhaseProduct.findOne({ + where: { + id: productId, + projectId, + phaseId, + deletedAt: { $eq: null }, + }, + }); + }) + .then((existing) => { + if (!existing) { // handle 404 - const err = new Error('No active phase product found for project id ' + + const err = new Error('No active phase product found for project id ' + `${projectId}, phase id ${phaseId} and product id ${productId}`); - err.status = 404; - throw err; - } + err.status = 404; + throw err; + } - previousValue = _.clone(existing.get({ plain: true })); - _.extend(existing, updatedProps); - return existing.save().catch(next); - })) - .then((updated) => { - req.log.debug('updated work item', JSON.stringify(updated, null, 2)); + previousValue = _.clone(existing.get({ plain: true })); + _.extend(existing, updatedProps); + return existing.save().catch(next); + })) + .then((updated) => { + req.log.debug('updated work item', JSON.stringify(updated, null, 2)); - const updatedValue = updated.get({ plain: true }); + const updatedValue = updated.get({ plain: true }); - // emit original and updated project phase information - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, - { original: previousValue, updated: updatedValue }, - { correlationId: req.id }, - ); - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, - RESOURCES.PHASE_PRODUCT, - updatedValue, - previousValue, - ROUTES.WORK_ITEMS.UPDATE, - ); + // emit original and updated project phase information + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, + { original: previousValue, updated: updatedValue }, + { correlationId: req.id }, + ); + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_PHASE_PRODUCT_UPDATED, + RESOURCES.PHASE_PRODUCT, + updatedValue, + previousValue, + ROUTES.WORK_ITEMS.UPDATE, + ); - res.json(updated); - }).catch(err => next(err)); + res.json(updated); + }).catch(err => next(err)); }, ]; diff --git a/src/routes/workItems/update.spec.js b/src/routes/workItems/update.spec.js index 311e7160..628ffd1d 100644 --- a/src/routes/workItems/update.spec.js +++ b/src/routes/workItems/update.spec.js @@ -74,97 +74,97 @@ describe('UPDATE Work Item', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { - models.WorkManagementPermission.create({ - policy: 'workItem.edit', - permission: { - allowRule: { - projectRoles: ['customer', 'copilot'], - topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + .then((template) => { + models.WorkManagementPermission.create({ + policy: 'workItem.edit', + permission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + }, + denyRule: { projectRoles: ['copilot'] }, }, - denyRule: { projectRoles: ['copilot'] }, - }, - projectTemplateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then(() => { - // Create projects - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId: template.id, + projectTemplateId: template.id, details: {}, createdBy: 1, updatedBy: 1, lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, + .then(() => { + // Create projects + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId: template.id, + details: {}, createdBy: 1, updatedBy: 1, - projectId, - }).then((phase) => { - workId = phase.id; - models.PhaseWorkStream.create({ - phaseId: workId, - workStreamId, - }) - .then(() => { - _.assign(body, { phaseId: workId, projectId }); - models.PhaseProduct.create(body).then((product) => { - productId = product.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then((project) => { + projectId = project.id; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + workStreamId = entity.id; + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, createdBy: 1, updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]).then(() => done()); + }).then((phase) => { + workId = phase.id; + models.PhaseWorkStream.create({ + phaseId: workId, + workStreamId, + }) + .then(() => { + _.assign(body, { phaseId: workId, projectId }); + models.PhaseProduct.create(body).then((product) => { + productId = product.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => done()); + }); + }); + }); }); }); - }); }); - }); }); - }); }); }); diff --git a/src/routes/workManagementPermissions/create.spec.js b/src/routes/workManagementPermissions/create.spec.js index 8c8eb190..c6554f87 100644 --- a/src/routes/workManagementPermissions/create.spec.js +++ b/src/routes/workManagementPermissions/create.spec.js @@ -43,10 +43,10 @@ describe('CREATE work management permission', () => { createdBy: 1, updatedBy: 2, }) - .then((t) => { - templateId = t.id; - body.projectTemplateId = templateId; - }).then(() => done()); + .then((t) => { + templateId = t.id; + body.projectTemplateId = templateId; + }).then(() => done()); }); }); diff --git a/src/routes/workManagementPermissions/delete.js b/src/routes/workManagementPermissions/delete.js index 1228918a..3080e9bb 100644 --- a/src/routes/workManagementPermissions/delete.js +++ b/src/routes/workManagementPermissions/delete.js @@ -18,7 +18,7 @@ module.exports = [ validate(schema), permissions('workManagementPermission.delete'), (req, res, next) => - models.sequelize.transaction(() => + models.sequelize.transaction(() => models.WorkManagementPermission.findByPk(req.params.id) .then((entity) => { if (!entity) { @@ -30,8 +30,8 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(entity => entity.destroy())) - .then(() => { - res.status(204).end(); - }) - .catch(next), + .then(() => { + res.status(204).end(); + }) + .catch(next), ]; diff --git a/src/routes/workManagementPermissions/delete.spec.js b/src/routes/workManagementPermissions/delete.spec.js index 9a24dcff..1a72f944 100644 --- a/src/routes/workManagementPermissions/delete.spec.js +++ b/src/routes/workManagementPermissions/delete.spec.js @@ -11,28 +11,28 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (permissionId, err, next) => { if (err) throw err; setTimeout(() => - models.WorkManagementPermission.findOne({ - where: { - id: permissionId, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); - - request(server) - .get(`/v5/projects/metadata/workManagementPermission/${permissionId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404) - .end(next); - } - }), 500); + models.WorkManagementPermission.findOne({ + where: { + id: permissionId, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); + + request(server) + .get(`/v5/projects/metadata/workManagementPermission/${permissionId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404) + .end(next); + } + }), 500); }; describe('DELETE work management permission', () => { @@ -82,49 +82,49 @@ describe('DELETE work management permission', () => { createdBy: 1, updatedBy: 2, }) - .then((t) => { - permission = _.assign({}, permission, { projectTemplateId: t.id }); - // Create projects - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId: t.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then((project) => { - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId: project.id, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId: project.id, - role: 'customer', - isPrimary: true, + .then((t) => { + permission = _.assign({}, permission, { projectTemplateId: t.id }); + // Create projects + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId: t.id, + details: {}, createdBy: 1, updatedBy: 1, - }]).then(() => { - models.WorkManagementPermission.create(permission) - .then((p) => { - permissionId = p.id; - }) - .then(() => done()); - }); + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then((project) => { + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId: project.id, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId: project.id, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => { + models.WorkManagementPermission.create(permission) + .then((p) => { + permissionId = p.id; + }) + .then(() => done()); + }); + }); }); - }); }); }); diff --git a/src/routes/workManagementPermissions/get.spec.js b/src/routes/workManagementPermissions/get.spec.js index 29457681..8794ba9a 100644 --- a/src/routes/workManagementPermissions/get.spec.js +++ b/src/routes/workManagementPermissions/get.spec.js @@ -43,14 +43,14 @@ describe('GET work management permission', () => { createdBy: 1, updatedBy: 2, }) - .then((t) => { - permission = _.assign({}, permission, { projectTemplateId: t.id }); - models.WorkManagementPermission.create(permission) - .then((p) => { - permissionId = p.id; - }) - .then(() => done()); - }); + .then((t) => { + permission = _.assign({}, permission, { projectTemplateId: t.id }); + models.WorkManagementPermission.create(permission) + .then((p) => { + permissionId = p.id; + }) + .then(() => done()); + }); }); }); diff --git a/src/routes/workManagementPermissions/list.js b/src/routes/workManagementPermissions/list.js index cef27bd8..c6720661 100644 --- a/src/routes/workManagementPermissions/list.js +++ b/src/routes/workManagementPermissions/list.js @@ -35,9 +35,9 @@ module.exports = [ attributes: { exclude: ['deletedAt', 'deletedBy'] }, raw: true, }) - .then((result) => { - res.json(result); - }) - .catch(next); + .then((result) => { + res.json(result); + }) + .catch(next); }, ]; diff --git a/src/routes/workManagementPermissions/list.spec.js b/src/routes/workManagementPermissions/list.spec.js index 0a9728ad..024d722c 100644 --- a/src/routes/workManagementPermissions/list.spec.js +++ b/src/routes/workManagementPermissions/list.spec.js @@ -96,13 +96,13 @@ describe('LIST work management permissions', () => { testUtil.clearDb() .then(() => { models.ProjectTemplate.bulkCreate(templates, { returning: true }) - .then((t) => { - templateIds = _.map(t, template => template.id); - const newPermissions = _.map(permissions, p => _.assign({}, p, { projectTemplateId: templateIds[0] })); - newPermissions.push(_.assign({}, permissions[0], { projectTemplateId: templateIds[1] })); - models.WorkManagementPermission.bulkCreate(newPermissions, { returning: true }) - .then(() => done()); - }); + .then((t) => { + templateIds = _.map(t, template => template.id); + const newPermissions = _.map(permissions, p => _.assign({}, p, { projectTemplateId: templateIds[0] })); + newPermissions.push(_.assign({}, permissions[0], { projectTemplateId: templateIds[1] })); + models.WorkManagementPermission.bulkCreate(newPermissions, { returning: true }) + .then(() => done()); + }); }); }); diff --git a/src/routes/workManagementPermissions/update.js b/src/routes/workManagementPermissions/update.js index 7e18851b..28839424 100644 --- a/src/routes/workManagementPermissions/update.js +++ b/src/routes/workManagementPermissions/update.js @@ -44,33 +44,33 @@ module.exports = [ }, attributes: { exclude: ['deletedAt', 'deletedBy'] }, }) - .then((permission) => { + .then((permission) => { // Not found - if (!permission) { - const apiErr = new Error(`Work Management Permission not found for id ${req.params.id}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } + if (!permission) { + const apiErr = new Error(`Work Management Permission not found for id ${req.params.id}`); + apiErr.status = 404; + return Promise.reject(apiErr); + } - permissionToUpdate = permission; - return models.WorkManagementPermission.findOne({ - where: { - policy: entityToUpdate.policy, - projectTemplateId: entityToUpdate.projectTemplateId, - id: { $ne: req.params.id }, - }, - paranoid: false, - }); - }) - .then((existing) => { - if (existing) { - const apiErr = new Error(`Work Management Permission already exists (may be deleted) for policy "${entityToUpdate.policy}" and project template id ${entityToUpdate.projectTemplateId}`); - apiErr.status = 400; - return Promise.reject(apiErr); - } + permissionToUpdate = permission; + return models.WorkManagementPermission.findOne({ + where: { + policy: entityToUpdate.policy, + projectTemplateId: entityToUpdate.projectTemplateId, + id: { $ne: req.params.id }, + }, + paranoid: false, + }); + }) + .then((existing) => { + if (existing) { + const apiErr = new Error(`Work Management Permission already exists (may be deleted) for policy "${entityToUpdate.policy}" and project template id ${entityToUpdate.projectTemplateId}`); + apiErr.status = 400; + return Promise.reject(apiErr); + } - return permissionToUpdate.update(entityToUpdate); - }), + return permissionToUpdate.update(entityToUpdate); + }), ) .then((updated) => { res.json(updated); diff --git a/src/routes/workManagementPermissions/update.spec.js b/src/routes/workManagementPermissions/update.spec.js index cb162481..6c1b53c8 100644 --- a/src/routes/workManagementPermissions/update.spec.js +++ b/src/routes/workManagementPermissions/update.spec.js @@ -44,15 +44,15 @@ describe('UPDATE work management permission', () => { createdBy: 1, updatedBy: 2, }) - .then((t) => { - templateId = t.id; - permission = _.assign({}, permission, { projectTemplateId: templateId }); - models.WorkManagementPermission.create(permission) - .then((p) => { - permissionId = p.id; - }) - .then(() => done()); - }); + .then((t) => { + templateId = t.id; + permission = _.assign({}, permission, { projectTemplateId: templateId }); + models.WorkManagementPermission.create(permission) + .then((p) => { + permissionId = p.id; + }) + .then(() => done()); + }); }); }); diff --git a/src/routes/workStreams/create.spec.js b/src/routes/workStreams/create.spec.js index 4a66cdb8..33640b41 100644 --- a/src/routes/workStreams/create.spec.js +++ b/src/routes/workStreams/create.spec.js @@ -85,9 +85,9 @@ describe('CREATE work stream', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - }) + .then((project) => { + projectId = project.id; + }) .then(() => done()); }); }); diff --git a/src/routes/workStreams/delete.js b/src/routes/workStreams/delete.js index aa2ef463..12b4f046 100644 --- a/src/routes/workStreams/delete.js +++ b/src/routes/workStreams/delete.js @@ -19,7 +19,7 @@ module.exports = [ validate(schema), permissions('workStream.delete'), (req, res, next) => - models.sequelize.transaction(() => + models.sequelize.transaction(() => models.WorkStream.findOne({ where: { id: req.params.id, @@ -37,8 +37,8 @@ module.exports = [ return entity.update({ deletedBy: req.authUser.userId }); }) .then(entity => entity.destroy())) - .then(() => { - res.status(204).end(); - }) - .catch(next), + .then(() => { + res.status(204).end(); + }) + .catch(next), ]; diff --git a/src/routes/workStreams/delete.spec.js b/src/routes/workStreams/delete.spec.js index 5a3b92b6..165430da 100644 --- a/src/routes/workStreams/delete.spec.js +++ b/src/routes/workStreams/delete.spec.js @@ -10,27 +10,27 @@ import testUtil from '../../tests/util'; const expectAfterDelete = (id, projectId, err, next) => { if (err) throw err; setTimeout(() => - models.WorkStream.findOne({ - where: { - id, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.WorkStream.findOne({ + where: { + id, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/${projectId}/workstreams/${id}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/${projectId}/workstreams/${id}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; describe('DELETE work stream', () => { @@ -68,20 +68,20 @@ describe('DELETE work stream', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - id = entity.id; - done(); + .then((project) => { + projectId = project.id; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + id = entity.id; + done(); + }); }); - }); }); }); }); diff --git a/src/routes/workStreams/get.spec.js b/src/routes/workStreams/get.spec.js index d696da90..770d3d2d 100644 --- a/src/routes/workStreams/get.spec.js +++ b/src/routes/workStreams/get.spec.js @@ -46,21 +46,21 @@ describe('GET work stream', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - id = entity.id; - workStream = entity; - done(); + .then((project) => { + projectId = project.id; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + id = entity.id; + workStream = entity; + done(); + }); }); - }); }); }); }); diff --git a/src/routes/workStreams/list.js b/src/routes/workStreams/list.js index c536e2b9..f865d11d 100644 --- a/src/routes/workStreams/list.js +++ b/src/routes/workStreams/list.js @@ -24,22 +24,22 @@ module.exports = [ id: projectId, }, }) - .then((countProject) => { - if (countProject === 0) { - const apiErr = new Error(`active project not found for project id ${projectId}`); - apiErr.status = 404; - throw apiErr; - } + .then((countProject) => { + if (countProject === 0) { + const apiErr = new Error(`active project not found for project id ${projectId}`); + apiErr.status = 404; + throw apiErr; + } - return models.WorkStream.findAll({ - where: { - projectId, - }, - attributes: { exclude: ['deletedAt', 'deletedBy'] }, - raw: true, - }); - }) - .then(workStreams => res.json(workStreams)) - .catch(next); + return models.WorkStream.findAll({ + where: { + projectId, + }, + attributes: { exclude: ['deletedAt', 'deletedBy'] }, + raw: true, + }); + }) + .then(workStreams => res.json(workStreams)) + .catch(next); }, ]; diff --git a/src/routes/workStreams/list.spec.js b/src/routes/workStreams/list.spec.js index 371ccc95..3794f59a 100644 --- a/src/routes/workStreams/list.spec.js +++ b/src/routes/workStreams/list.spec.js @@ -59,10 +59,10 @@ describe('LIST work streams', () => { lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - models.WorkStream.bulkCreate(_.map(workStreams, w => _.assign(w, { projectId }))).then(() => done()); - }); + .then((project) => { + projectId = project.id; + models.WorkStream.bulkCreate(_.map(workStreams, w => _.assign(w, { projectId }))).then(() => done()); + }); }); }); }); diff --git a/src/routes/workStreams/update.js b/src/routes/workStreams/update.js index e370c80a..4094c933 100644 --- a/src/routes/workStreams/update.js +++ b/src/routes/workStreams/update.js @@ -45,17 +45,17 @@ module.exports = [ projectId, }, }) - .then((workStream) => { - if (!workStream) { + .then((workStream) => { + if (!workStream) { // handle 404 - const err = new Error(`work stream not found for project id ${projectId} ` + + const err = new Error(`work stream not found for project id ${projectId} ` + `and work stream id ${workStreamId}`); - err.status = 404; - return Promise.reject(err); - } + err.status = 404; + return Promise.reject(err); + } - return workStream.update(entityToUpdate); - }) + return workStream.update(entityToUpdate); + }) .then((workStream) => { res.json(workStream); return Promise.resolve(); diff --git a/src/routes/workStreams/update.spec.js b/src/routes/workStreams/update.spec.js index 96c074f5..6b4bb854 100644 --- a/src/routes/workStreams/update.spec.js +++ b/src/routes/workStreams/update.spec.js @@ -32,52 +32,52 @@ describe('UPDATE Work Stream', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { - models.WorkManagementPermission.create({ - policy: 'workStream.edit', - permission: { - allowRule: { projectRoles: ['manager', 'copilot'], topcoderRoles: ['Connect Admin', 'administrator'] }, - denyRule: { projectRoles: ['copilot'] }, - }, - projectTemplateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then(() => { - // Create project - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId: template.id, + .then((template) => { + models.WorkManagementPermission.create({ + policy: 'workStream.edit', + permission: { + allowRule: { projectRoles: ['manager', 'copilot'], topcoderRoles: ['Connect Admin', 'administrator'] }, + denyRule: { projectRoles: ['copilot'] }, + }, + projectTemplateId: template.id, details: {}, createdBy: 1, updatedBy: 1, lastActivityAt: 1, lastActivityUserId: '1', }) - .then((project) => { - projectId = project.id; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - id = entity.id; - workStream = entity; - done(); + .then(() => { + // Create project + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId: template.id, + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then((project) => { + projectId = project.id; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + id = entity.id; + workStream = entity; + done(); + }); + }); }); - }); }); - }); }); }); diff --git a/src/routes/works/create.js b/src/routes/works/create.js index a1d3cf5e..89fa0fe1 100644 --- a/src/routes/works/create.js +++ b/src/routes/works/create.js @@ -134,26 +134,26 @@ module.exports = [ }); }), ) - .then(() => { + .then(() => { // Send events to buses - req.log.debug('Sending event to RabbitMQ bus for project phase %d', newProjectPhase.id); - req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_PHASE_ADDED, - { added: newProjectPhase, route: TIMELINE_REFERENCES.WORK }, - { correlationId: req.id }, - ); + req.log.debug('Sending event to RabbitMQ bus for project phase %d', newProjectPhase.id); + req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_PHASE_ADDED, + { added: newProjectPhase, route: TIMELINE_REFERENCES.WORK }, + { correlationId: req.id }, + ); - req.log.debug('Sending event to Kafka bus for project phase %d', newProjectPhase.id); - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_PHASE_ADDED, - RESOURCES.PHASE, - newProjectPhase, - ); + req.log.debug('Sending event to Kafka bus for project phase %d', newProjectPhase.id); + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_PHASE_ADDED, + RESOURCES.PHASE, + newProjectPhase, + ); - res.status(201).json(newProjectPhase); - }) - .catch((err) => { - util.handleError('Error creating work', err, req, next); - }); + res.status(201).json(newProjectPhase); + }) + .catch((err) => { + util.handleError('Error creating work', err, req, next); + }); }, ]; diff --git a/src/routes/works/create.spec.js b/src/routes/works/create.spec.js index 0d3c6d67..2c85ae01 100644 --- a/src/routes/works/create.spec.js +++ b/src/routes/works/create.spec.js @@ -79,93 +79,93 @@ describe('CREATE work', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { - models.WorkManagementPermission.create({ - policy: 'work.create', - permission: { - allowRule: { - projectRoles: ['customer', 'copilot'], - topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + .then((template) => { + models.WorkManagementPermission.create({ + policy: 'work.create', + permission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + }, + denyRule: { projectRoles: ['copilot'] }, }, - denyRule: { projectRoles: ['copilot'] }, - }, - projectTemplateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then(() => { - // Create projects - models.Project.create(_.assign(project, { templateId: template.id })) - .then((_project) => { - projectId = _project.id; - projectName = _project.name; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, - projectId, - role: 'customer', - isPrimary: true, - createdBy: 1, - updatedBy: 1, - }]) - .then(() => - models.ProductTemplate.create({ - name: 'name 1', - productKey: 'productKey 1', - category: 'generic', - subCategory: 'generic', - icon: 'http://example.com/icon1.ico', - brief: 'brief 1', - details: 'details 1', - aliases: ['product key 1', 'product_key_1'], - template: { - template1: { - name: 'template 1', - details: { - anyDetails: 'any details 1', - }, - others: ['others 11', 'others 12'], - }, - template2: { - name: 'template 2', - details: { - anyDetails: 'any details 2', - }, - others: ['others 21', 'others 22'], - }, - }, - createdBy: 1, - updatedBy: 2, - }).then((productTemplate) => { - productTemplateId = productTemplate.id; - done(); - }), - ); + projectTemplateId: template.id, + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then(() => { + // Create projects + models.Project.create(_.assign(project, { templateId: template.id })) + .then((_project) => { + projectId = _project.id; + projectName = _project.name; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + workStreamId = entity.id; + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]) + .then(() => + models.ProductTemplate.create({ + name: 'name 1', + productKey: 'productKey 1', + category: 'generic', + subCategory: 'generic', + icon: 'http://example.com/icon1.ico', + brief: 'brief 1', + details: 'details 1', + aliases: ['product key 1', 'product_key_1'], + template: { + template1: { + name: 'template 1', + details: { + anyDetails: 'any details 1', + }, + others: ['others 11', 'others 12'], + }, + template2: { + name: 'template 2', + details: { + anyDetails: 'any details 2', + }, + others: ['others 21', 'others 22'], + }, + }, + createdBy: 1, + updatedBy: 2, + }).then((productTemplate) => { + productTemplateId = productTemplate.id; + done(); + }), + ); + }); + }); }); - }); }); - }); }); }); @@ -339,42 +339,42 @@ describe('CREATE work', () => { it('should send correct BUS API messages when work added', (done) => { request(server) - .post(`/v5/projects/${projectId}/workstreams/${workStreamId}/works`) - .set({ - Authorization: `Bearer ${testUtil.jwts.member}`, - }) - .send(body) - .expect('Content-Type', /json/) - .expect(201) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_CREATED, sinon.match({ - resource: RESOURCES.PHASE, - name: body.name, - status: body.status, - budget: body.budget, - progress: body.progress, - projectId, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051331, - initiatorUserId: 40051331, - })).should.be.true; - - done(); - }); - } - }); + .post(`/v5/projects/${projectId}/workstreams/${workStreamId}/works`) + .set({ + Authorization: `Bearer ${testUtil.jwts.member}`, + }) + .send(body) + .expect('Content-Type', /json/) + .expect(201) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_CREATED, sinon.match({ + resource: RESOURCES.PHASE, + name: body.name, + status: body.status, + budget: body.budget, + progress: body.progress, + projectId, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051331, + initiatorUserId: 40051331, + })).should.be.true; + + done(); + }); + } + }); }); }); diff --git a/src/routes/works/delete.js b/src/routes/works/delete.js index 885c8c5b..9491e5db 100644 --- a/src/routes/works/delete.js +++ b/src/routes/works/delete.js @@ -25,57 +25,57 @@ module.exports = [ (req, res, next) => { const projectId = req.params.projectId; models.sequelize.transaction(() => - models.PhaseWorkStream.findOne({ - where: { - phaseId: req.params.id, - workStreamId: req.params.workStreamId, - }, - }) - .then((work) => { - // Not found - if (!work) { - const apiErr = new Error(`work not found for work stream id ${req.params.workStreamId} ` + - `and work id ${req.params.id}`); - apiErr.status = 404; - throw apiErr; - } - - return models.ProjectPhase.findOne({ + models.PhaseWorkStream.findOne({ where: { - id: req.params.id, - projectId, + phaseId: req.params.id, + workStreamId: req.params.workStreamId, }, - }); - }) - .then((entity) => { - if (!entity) { - const apiErr = new Error(`work not found for work stream id ${req.params.workStreamId}, ` + + }) + .then((work) => { + // Not found + if (!work) { + const apiErr = new Error(`work not found for work stream id ${req.params.workStreamId} ` + + `and work id ${req.params.id}`); + apiErr.status = 404; + throw apiErr; + } + + return models.ProjectPhase.findOne({ + where: { + id: req.params.id, + projectId, + }, + }); + }) + .then((entity) => { + if (!entity) { + const apiErr = new Error(`work not found for work stream id ${req.params.workStreamId}, ` + `project id ${projectId} and work id ${req.params.id}`); - apiErr.status = 404; - return Promise.reject(apiErr); - } - // Update the deletedBy, then delete - return entity.update({ deletedBy: req.authUser.userId }); - }) - .then(entity => entity.destroy())) - .then((deleted) => { - req.log.debug('deleted work', JSON.stringify(deleted, null, 2)); + apiErr.status = 404; + return Promise.reject(apiErr); + } + // Update the deletedBy, then delete + return entity.update({ deletedBy: req.authUser.userId }); + }) + .then(entity => entity.destroy())) + .then((deleted) => { + req.log.debug('deleted work', JSON.stringify(deleted, null, 2)); - // Send events to buses - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_PHASE_REMOVED, - { deleted, route: TIMELINE_REFERENCES.WORK }, - { correlationId: req.id }, - ); + // Send events to buses + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_PHASE_REMOVED, + { deleted, route: TIMELINE_REFERENCES.WORK }, + { correlationId: req.id }, + ); - // emit event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_PHASE_REMOVED, - RESOURCES.PHASE, - _.pick(deleted.toJSON(), 'id')); + // emit event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_PHASE_REMOVED, + RESOURCES.PHASE, + _.pick(deleted.toJSON(), 'id')); - res.status(204).json({}); - }).catch(err => next(err)); + res.status(204).json({}); + }).catch(err => next(err)); }, ]; diff --git a/src/routes/works/delete.spec.js b/src/routes/works/delete.spec.js index e1ed3bab..a45644ad 100644 --- a/src/routes/works/delete.spec.js +++ b/src/routes/works/delete.spec.js @@ -24,27 +24,27 @@ chai.should(); const expectAfterDelete = (workId, projectId, workStreamId, err, next) => { if (err) throw err; setTimeout(() => - models.ProjectPhase.findOne({ - where: { - id: workId, - }, - paranoid: false, - }) - .then((res) => { - if (!res) { - throw new Error('Should found the entity'); - } else { - chai.assert.isNotNull(res.deletedAt); - chai.assert.isNotNull(res.deletedBy); + models.ProjectPhase.findOne({ + where: { + id: workId, + }, + paranoid: false, + }) + .then((res) => { + if (!res) { + throw new Error('Should found the entity'); + } else { + chai.assert.isNotNull(res.deletedAt); + chai.assert.isNotNull(res.deletedBy); - request(server) - .get(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .expect(404, next); - } - }), 500); + request(server) + .get(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .expect(404, next); + } + }), 500); }; describe('DELETE work', () => { @@ -104,81 +104,81 @@ describe('DELETE work', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { - models.WorkManagementPermission.create({ - policy: 'work.delete', - permission: { - allowRule: { - projectRoles: ['customer', 'copilot'], - topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + .then((template) => { + models.WorkManagementPermission.create({ + policy: 'work.delete', + permission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + }, + denyRule: { projectRoles: ['copilot'] }, }, - denyRule: { projectRoles: ['copilot'] }, - }, - projectTemplateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then(() => { - // Create projects - models.Project.create(_.assign(project, { templateId: template.id })) - .then((_project) => { - projectId = _project.id; - projectName = _project.name; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - workId = phase.id; - models.PhaseWorkStream.create({ - phaseId: workId, - workStreamId, - }).then(() => { - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, + projectTemplateId: template.id, + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then(() => { + // Create projects + models.Project.create(_.assign(project, { templateId: template.id })) + .then((_project) => { + projectId = _project.id; + projectName = _project.name; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', projectId, - role: 'customer', - isPrimary: true, createdBy: 1, updatedBy: 1, - }]).then(() => done()); + }).then((entity) => { + workStreamId = entity.id; + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, + createdBy: 1, + updatedBy: 1, + projectId, + }).then((phase) => { + workId = phase.id; + models.PhaseWorkStream.create({ + phaseId: workId, + workStreamId, + }).then(() => { + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => done()); + }); + }); + }); }); - }); }); - }); }); - }); }); }); @@ -283,36 +283,36 @@ describe('DELETE work', () => { it('should send correct BUS API messages when work removed', (done) => { request(server) - .delete(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, - }) - .expect(204) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_DELETED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051336, - initiatorUserId: 40051336, - })).should.be.true; - - done(); - }); - } - }); + .delete(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.connectAdmin}`, + }) + .expect(204) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_DELETED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051336, + initiatorUserId: 40051336, + })).should.be.true; + + done(); + }); + } + }); }); }); diff --git a/src/routes/works/get.spec.js b/src/routes/works/get.spec.js index 768fd785..ff25805e 100644 --- a/src/routes/works/get.spec.js +++ b/src/routes/works/get.spec.js @@ -45,55 +45,55 @@ describe('GET work', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { + .then((template) => { // Create projects - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then((project) => { - projectId = project.id; - models.WorkStream.create({ - name: 'Work Stream', + models.Project.create({ type: 'generic', - status: 'active', - projectId, + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId: template.id, + details: {}, createdBy: 1, updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - models.ProjectPhase.create({ - name: 'test project phase', - status: 'active', - startDate: '2018-05-15T00:00:00Z', - endDate: '2018-05-15T12:00:00Z', - budget: 20.0, - progress: 1.23456, - details: { - message: 'This can be any json', - }, - createdBy: 1, - updatedBy: 1, - projectId, - }).then((phase) => { - workId = phase.id; - models.PhaseWorkStream.create({ - phaseId: workId, - workStreamId, - }).then(() => done()); + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then((project) => { + projectId = project.id; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', + projectId, + createdBy: 1, + updatedBy: 1, + }).then((entity) => { + workStreamId = entity.id; + models.ProjectPhase.create({ + name: 'test project phase', + status: 'active', + startDate: '2018-05-15T00:00:00Z', + endDate: '2018-05-15T12:00:00Z', + budget: 20.0, + progress: 1.23456, + details: { + message: 'This can be any json', + }, + createdBy: 1, + updatedBy: 1, + projectId, + }).then((phase) => { + workId = phase.id; + models.PhaseWorkStream.create({ + phaseId: workId, + workStreamId, + }).then(() => done()); + }); + }); }); - }); }); - }); }); }); diff --git a/src/routes/works/list.js b/src/routes/works/list.js index 78f00f03..2f797fde 100644 --- a/src/routes/works/list.js +++ b/src/routes/works/list.js @@ -71,26 +71,26 @@ module.exports = [ include: [include], order: [[models.ProjectPhase, sortParameters[0], sortParameters[1]]], }) - .then((existingWorkStream) => { - if (!existingWorkStream) { + .then((existingWorkStream) => { + if (!existingWorkStream) { // handle 404 - const err = new Error(`active work stream not found for project id ${projectId} ` + + const err = new Error(`active work stream not found for project id ${projectId} ` + `and work stream id ${workStreamId}`); - err.status = 404; - throw err; - } - - // rename 'products' to 'workItems' - return existingWorkStream.ProjectPhases.map((phase) => { - const phaseObj = phase.get({ plain: true }); - if (_.has(phaseObj, 'products')) { - _.set(phaseObj, 'workItems', _.get(phaseObj, 'products')); - _.unset(phaseObj, 'products'); + err.status = 404; + throw err; } - return phaseObj; - }); - }) - .then(phases => res.json(phases)) - .catch(next); + + // rename 'products' to 'workItems' + return existingWorkStream.ProjectPhases.map((phase) => { + const phaseObj = phase.get({ plain: true }); + if (_.has(phaseObj, 'products')) { + _.set(phaseObj, 'workItems', _.get(phaseObj, 'products')); + _.unset(phaseObj, 'products'); + } + return phaseObj; + }); + }) + .then(phases => res.json(phases)) + .catch(next); }, ]; diff --git a/src/routes/works/list.spec.js b/src/routes/works/list.spec.js index 4edc1796..859a89c3 100644 --- a/src/routes/works/list.spec.js +++ b/src/routes/works/list.spec.js @@ -59,35 +59,35 @@ describe('LIST works', () => { beforeEach((done) => { testUtil.clearDb() - .then(() => { - models.ProjectTemplate.create({ - name: 'template 2', - key: 'key 2', - category: 'category 2', - icon: 'http://example.com/icon1.ico', - question: 'question 2', - info: 'info 2', - aliases: ['key-2', 'key_2'], - scope: {}, - phases: {}, - createdBy: 1, - updatedBy: 2, - }) - .then((template) => { - // Create projects - models.Project.create({ - type: 'generic', - billingAccountId: 1, - name: 'test1', - description: 'test project1', - status: 'draft', - templateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) + .then(() => { + models.ProjectTemplate.create({ + name: 'template 2', + key: 'key 2', + category: 'category 2', + icon: 'http://example.com/icon1.ico', + question: 'question 2', + info: 'info 2', + aliases: ['key-2', 'key_2'], + scope: {}, + phases: {}, + createdBy: 1, + updatedBy: 2, + }) + .then((template) => { + // Create projects + models.Project.create({ + type: 'generic', + billingAccountId: 1, + name: 'test1', + description: 'test project1', + status: 'draft', + templateId: template.id, + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }) .then((project) => { projectId = project.id; models.WorkStream.create({ @@ -118,8 +118,8 @@ describe('LIST works', () => { }); }); }); - }); - }); + }); + }); }); after((done) => { diff --git a/src/routes/works/update.js b/src/routes/works/update.js index 0dd343a8..8550f821 100644 --- a/src/routes/works/update.js +++ b/src/routes/works/update.js @@ -66,41 +66,41 @@ module.exports = [ }, }], }) - .then((existing) => { - if (!existing) { + .then((existing) => { + if (!existing) { // handle 404 - const err = new Error('No active project phase found for project id ' + + const err = new Error('No active project phase found for project id ' + `${projectId} and work stream ${workStreamId} and phase id ${phaseId}`); - err.status = 404; - throw err; - } else { - previousValue = _.clone(existing.get({ plain: true })); - - // make sure startDate < endDate - let startDate; - let endDate; - if (updatedProps.startDate) { - startDate = new Date(updatedProps.startDate); - } else { - startDate = existing.startDate !== null ? new Date(existing.startDate) : null; - } - - if (updatedProps.endDate) { - endDate = new Date(updatedProps.endDate); - } else { - endDate = existing.endDate !== null ? new Date(existing.endDate) : null; - } - - if (startDate !== null && endDate !== null && startDate > endDate) { - const err = new Error('startDate must not be after endDate.'); - err.status = 400; + err.status = 404; throw err; } else { - _.extend(existing, updatedProps); - return existing.save().catch(next); + previousValue = _.clone(existing.get({ plain: true })); + + // make sure startDate < endDate + let startDate; + let endDate; + if (updatedProps.startDate) { + startDate = new Date(updatedProps.startDate); + } else { + startDate = existing.startDate !== null ? new Date(existing.startDate) : null; + } + + if (updatedProps.endDate) { + endDate = new Date(updatedProps.endDate); + } else { + endDate = existing.endDate !== null ? new Date(existing.endDate) : null; + } + + if (startDate !== null && endDate !== null && startDate > endDate) { + const err = new Error('startDate must not be after endDate.'); + err.status = 400; + throw err; + } else { + _.extend(existing, updatedProps); + return existing.save().catch(next); + } } - } - }) + }) .then((updatedPhase) => { updated = updatedPhase; // Ignore re-ordering if there's no order specified for this phase diff --git a/src/routes/works/update.spec.js b/src/routes/works/update.spec.js index ce4301b1..cf79077a 100644 --- a/src/routes/works/update.spec.js +++ b/src/routes/works/update.spec.js @@ -119,82 +119,82 @@ describe('UPDATE work', () => { createdBy: 1, updatedBy: 2, }) - .then((template) => { - models.WorkManagementPermission.create({ - policy: 'work.edit', - permission: { - allowRule: { - projectRoles: ['customer', 'copilot'], - topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + .then((template) => { + models.WorkManagementPermission.create({ + policy: 'work.edit', + permission: { + allowRule: { + projectRoles: ['customer', 'copilot'], + topcoderRoles: ['Connect Manager', 'Connect Admin', 'administrator'], + }, + denyRule: { projectRoles: ['copilot'] }, }, - denyRule: { projectRoles: ['copilot'] }, - }, - projectTemplateId: template.id, - details: {}, - createdBy: 1, - updatedBy: 1, - lastActivityAt: 1, - lastActivityUserId: '1', - }) - .then(() => { - // Create projects - models.Project.create(_.assign(project, { templateId: template.id })) - .then((_project) => { - projectId = _project.id; - projectName = _project.name; - models.WorkStream.create({ - name: 'Work Stream', - type: 'generic', - status: 'active', - projectId, - createdBy: 1, - updatedBy: 1, - }).then((entity) => { - workStreamId = entity.id; - _.assign(body, { projectId }); - const createPhases = [ - body, - _.assign({ order: 1 }, body), - _.assign({}, body, { status: 'draft' }), - ]; - models.ProjectPhase.bulkCreate(createPhases, { returning: true }).then((phases) => { - workId = phases[0].id; - workId2 = phases[1].id; - workId3 = phases[2].id; - models.PhaseWorkStream.bulkCreate([{ - phaseId: phases[0].id, - workStreamId, - }, { - phaseId: phases[1].id, - workStreamId, - }, { - phaseId: phases[2].id, - workStreamId, - }]).then(() => { - // create members - models.ProjectMember.bulkCreate([{ - id: 1, - userId: copilotUser.userId, - projectId, - role: 'copilot', - isPrimary: false, - createdBy: 1, - updatedBy: 1, - }, { - id: 2, - userId: memberUser.userId, + projectTemplateId: template.id, + details: {}, + createdBy: 1, + updatedBy: 1, + lastActivityAt: 1, + lastActivityUserId: '1', + }) + .then(() => { + // Create projects + models.Project.create(_.assign(project, { templateId: template.id })) + .then((_project) => { + projectId = _project.id; + projectName = _project.name; + models.WorkStream.create({ + name: 'Work Stream', + type: 'generic', + status: 'active', projectId, - role: 'customer', - isPrimary: true, createdBy: 1, updatedBy: 1, - }]).then(() => done()); + }).then((entity) => { + workStreamId = entity.id; + _.assign(body, { projectId }); + const createPhases = [ + body, + _.assign({ order: 1 }, body), + _.assign({}, body, { status: 'draft' }), + ]; + models.ProjectPhase.bulkCreate(createPhases, { returning: true }).then((phases) => { + workId = phases[0].id; + workId2 = phases[1].id; + workId3 = phases[2].id; + models.PhaseWorkStream.bulkCreate([{ + phaseId: phases[0].id, + workStreamId, + }, { + phaseId: phases[1].id, + workStreamId, + }, { + phaseId: phases[2].id, + workStreamId, + }]).then(() => { + // create members + models.ProjectMember.bulkCreate([{ + id: 1, + userId: copilotUser.userId, + projectId, + role: 'copilot', + isPrimary: false, + createdBy: 1, + updatedBy: 1, + }, { + id: 2, + userId: memberUser.userId, + projectId, + role: 'customer', + isPrimary: true, + createdBy: 1, + updatedBy: 1, + }]).then(() => done()); + }); + }); + }); }); - }); }); - }); }); - }); }); }); @@ -372,338 +372,338 @@ describe('UPDATE work', () => { it('should send correct BUS API messages when spentBudget updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - spentBudget: 123, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + spentBudget: 123, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PAYMENT).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PAYMENT).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when progress updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - progress: 50, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(3); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PROGRESS).should.be.true; - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PROGRESS_MODIFIED).should.be.true; - done(); - }); - } - }); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + progress: 50, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(3); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_PROGRESS).should.be.true; + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PROGRESS_MODIFIED).should.be.true; + done(); + }); + } + }); }); it('should send correct BUS API messages when details updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - details: { - text: 'something', - }, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + details: { + text: 'something', + }, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_SCOPE).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_UPDATE_SCOPE).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when status updated (completed)', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - status: 'completed', - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + status: 'completed', + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_COMPLETED).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_COMPLETED).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when status updated (active)', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId3}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - status: 'active', - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId3}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + status: 'active', + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId3, - updatedBy: testUtil.userIds.admin, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId3, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_ACTIVE).should.be.true; + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_WORK_TRANSITION_ACTIVE).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when budget updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - budget: 123, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + budget: 123, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when startDate updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - startDate: 123, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051333, - initiatorUserId: 40051333, - })).should.be.true; - - done(); - }); - } - }); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + startDate: 123, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051333, + initiatorUserId: 40051333, + })).should.be.true; + + done(); + }); + } + }); }); it('should send correct BUS API messages when duration updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - duration: 100, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(2); - - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - duration: 100, - })).should.be.true; - - // Check Notification Service events - createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ - projectId, - projectName, - projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, - userId: 40051333, - initiatorUserId: 40051333, - })).should.be.true; - - done(); - }); - } - }); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + duration: 100, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(2); + + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + duration: 100, + })).should.be.true; + + // Check Notification Service events + createEventSpy.calledWith(CONNECT_NOTIFICATION_EVENT.PROJECT_PLAN_UPDATED, sinon.match({ + projectId, + projectName, + projectUrl: `https://local.topcoder-dev.com/projects/${projectId}`, + userId: 40051333, + initiatorUserId: 40051333, + })).should.be.true; + + done(); + }); + } + }); }); it('should send correct BUS API messages when order updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - order: 100, - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + order: 100, + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - // NOTE: no other event should be called, as this phase doesn't move any other phases + // NOTE: no other event should be called, as this phase doesn't move any other phases - done(); - }); - } - }); + done(); + }); + } + }); }); it('should send correct BUS API messages when endDate updated', (done) => { request(server) - .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) - .set({ - Authorization: `Bearer ${testUtil.jwts.admin}`, - }) - .send({ - endDate: new Date(), - }) - .expect('Content-Type', /json/) - .expect(200) - .end((err) => { - if (err) { - done(err); - } else { - testUtil.wait(() => { - createEventSpy.callCount.should.be.eql(1); + .patch(`/v5/projects/${projectId}/workstreams/${workStreamId}/works/${workId}`) + .set({ + Authorization: `Bearer ${testUtil.jwts.admin}`, + }) + .send({ + endDate: new Date(), + }) + .expect('Content-Type', /json/) + .expect(200) + .end((err) => { + if (err) { + done(err); + } else { + testUtil.wait(() => { + createEventSpy.callCount.should.be.eql(1); - createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ - resource: RESOURCES.PHASE, - id: workId, - updatedBy: testUtil.userIds.admin, - })).should.be.true; + createEventSpy.calledWith(BUS_API_EVENT.PROJECT_PHASE_UPDATED, sinon.match({ + resource: RESOURCES.PHASE, + id: workId, + updatedBy: testUtil.userIds.admin, + })).should.be.true; - done(); - }); - } - }); + done(); + }); + } + }); }); }); diff --git a/src/services/index.js b/src/services/index.js index 6c8306c8..ff13ac32 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -18,7 +18,7 @@ module.exports = (fapp, logger) => { const app = fapp; app.services = app.service || {}; if (process.env.NODE_ENV.toLowerCase() === 'test') { - require('../tests/serviceMocks')(app); // eslint-disable-line global-require + require('../tests/serviceMocks')(app); // eslint-disable-line global-require } else { logger.info('initializing RabbitMQ service'); // RabbitMQ Initialization @@ -30,16 +30,16 @@ module.exports = (fapp, logger) => { config.get('pubsubExchangeName'), config.get('pubsubQueueName'), ) - .then(() => { - logger.info('RabbitMQ service initialized'); - }) + .then(() => { + logger.info('RabbitMQ service initialized'); + }) // .then(() => startKafkaConsumer(kafkaHandlers, app, logger)) // .then(() => { // logger.info('Kafka consumer service initialized'); // }) - .catch((err) => { - logger.error('Error initializing services', err); + .catch((err) => { + logger.error('Error initializing services', err); // gracefulShutdown() - }); + }); } }; diff --git a/src/services/messageService.js b/src/services/messageService.js index f1ffc384..dc429fce 100644 --- a/src/services/messageService.js +++ b/src/services/messageService.js @@ -149,14 +149,14 @@ function getTopicByTag(projectId, tag, logger) { logger.debug(`calling message service for fetching ${tag}`); const encodedFilter = encodeURIComponent(`reference=project&referenceId=${projectId}&tag=${tag}`); return msgClient.get(`/topics/list/db?filter=${encodedFilter}`) - .then((resp) => { - const topics = _.get(resp.data, 'result.content', []); - logger.debug(`Fetched ${topics.length} topics`); - if (topics && topics.length > 0) { - return topics[0]; - } - return null; - }); + .then((resp) => { + const topics = _.get(resp.data, 'result.content', []); + logger.debug(`Fetched ${topics.length} topics`); + if (topics && topics.length > 0) { + return topics[0]; + } + return null; + }); }); } diff --git a/src/tests/util.js b/src/tests/util.js index 4983280f..e9a64bbb 100644 --- a/src/tests/util.js +++ b/src/tests/util.js @@ -8,13 +8,13 @@ const jwt = require('jsonwebtoken'); export default { clearDb: done => models.sequelize.sync({ force: true }) - .then(() => { - if (done) done(); - }), + .then(() => { + if (done) done(); + }), clearES: done => elasticsearchSync.sync() - .then(() => { - if (done) done(); - }), + .then(() => { + if (done) done(); + }), mockHttpClient: { defaults: { headers: { common: {} } }, interceptors: { response: { use: () => {} } }, @@ -43,6 +43,9 @@ export default { [M2M_SCOPES.PROJECT_MEMBERS.ALL]: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoidGVzdEBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9tMm0udG9wY29kZXItZGV2LmNvbS8iLCJpYXQiOjE1ODc3MzI0NTksImV4cCI6MjU4NzgxODg1OSwiYXpwIjoidGVzdCIsInNjb3BlIjoiYWxsOnByb2plY3QtbWVtYmVycyIsImd0eSI6ImNsaWVudC1jcmVkZW50aWFscyJ9.6KNEtsb1Y9F8wS5LPgJbCi4dThaIH9v1mMJEGoXWTug', [M2M_SCOPES.PROJECT_MEMBERS.READ]: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoidGVzdEBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9tMm0udG9wY29kZXItZGV2LmNvbS8iLCJpYXQiOjE1ODc3MzI0NTksImV4cCI6MjU4NzgxODg1OSwiYXpwIjoidGVzdCIsInNjb3BlIjoicmVhZDpwcm9qZWN0LW1lbWJlcnMiLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMifQ.7qoDXT76_aQ3xggzMnb6qk49HD4GtD-ePDGAEtinh_U', [M2M_SCOPES.PROJECT_MEMBERS.WRITE]: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoidGVzdEBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9tMm0udG9wY29kZXItZGV2LmNvbS8iLCJpYXQiOjE1ODc3MzI0NTksImV4cCI6MjU4NzgxODg1OSwiYXpwIjoidGVzdCIsInNjb3BlIjoid3JpdGU6cHJvamVjdC1tZW1iZXJzIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.FOF8Ej8vOkjCrihPEHR4tG2LNwwV180oHaxMpFgxb7Y', + [M2M_SCOPES.PROJECT_INVITES.ALL]: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoidGVzdEBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9tMm0udG9wY29kZXItZGV2LmNvbS8iLCJpYXQiOjE1ODc3MzI0NTksImV4cCI6MjU4NzgxODg1OSwiYXpwIjoidGVzdCIsInNjb3BlIjoiYWxsOnByb2plY3QtaW52aXRlcyIsImd0eSI6ImNsaWVudC1jcmVkZW50aWFscyJ9.5nfgbHkZA7psRNtxSF94hcUL0BIaUs92URtzi_oS3bQ', + [M2M_SCOPES.PROJECT_INVITES.READ]: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoidGVzdEBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9tMm0udG9wY29kZXItZGV2LmNvbS8iLCJpYXQiOjE1ODc3MzI0NTksImV4cCI6MjU4NzgxODg1OSwiYXpwIjoidGVzdCIsInNjb3BlIjoicmVhZDpwcm9qZWN0LWludml0ZXMiLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMifQ.Ku0ti5MGg6rfDMg2ls17MrRjsc9XWdX6iKaPBDDCVSE', + [M2M_SCOPES.PROJECT_INVITES.WRITE]: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoidGVzdEBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9tMm0udG9wY29kZXItZGV2LmNvbS8iLCJpYXQiOjE1ODc3MzI0NTksImV4cCI6MjU4NzgxODg1OSwiYXpwIjoidGVzdCIsInNjb3BlIjoid3JpdGU6cHJvamVjdC1pbnZpdGVzIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.pdSdglTBxHjorU_sfXLG5fSqU8UzHpTLVt_0RY0pX0U', }, userIds: { member: 40051331, diff --git a/src/util.js b/src/util.js index cc418f24..3ae966e3 100644 --- a/src/util.js +++ b/src/util.js @@ -116,9 +116,9 @@ const projectServiceUtils = { */ calculateProjectEstimationItems: (req, projectId) => // delete ALL existent ProjectEstimationItems for the project - models.ProjectEstimationItem.deleteAllForProject(models, projectId, req.authUser, { - includeAllProjectEstimatinoItemsForInternalUsage: true, - }) + models.ProjectEstimationItem.deleteAllForProject(models, projectId, req.authUser, { + includeAllProjectEstimatinoItemsForInternalUsage: true, + }) // retrieve ProjectSettings and ProjectEstimations .then(() => Promise.all([ @@ -486,12 +486,12 @@ const projectServiceUtils = { } const data = query ? (yield esClient.search({ index: INDEX, type: TYPE, body: query })) : - (yield esClient.search({ index: INDEX, type: TYPE })); + (yield esClient.search({ index: INDEX, type: TYPE })); if (data.hits.hits.length > 0 && data.hits.hits[0].inner_hits) { return data.hits.hits[0].inner_hits; } - return data.hits.hits.length > 0 ? data.hits.hits[0]._source : { // eslint-disable-line no-underscore-dangle + return data.hits.hits.length > 0 ? data.hits.hits[0]._source : { // eslint-disable-line no-underscore-dangle productTemplates: [], forms: [], projectTemplates: [], @@ -733,9 +733,7 @@ const projectServiceUtils = { let memberDetailFields = ['handle']; // Only Topcoder admins can get emails, first and last name for users - if (util.hasPermissionByReq({ topcoderRoles: [USER_ROLE.TOPCODER_ADMIN] }, req)) { - memberDetailFields = memberDetailFields.concat(['email', 'firstName', 'lastName']); - } + memberDetailFields = util.addUserDetailsFieldsIfAllowed(memberDetailFields, req); let allMemberDetails = []; if (_.intersection(fields, _.union(memberDetailFields, memberTraitFields)).length > 0) { @@ -809,7 +807,7 @@ const projectServiceUtils = { Authorization: `Bearer ${token}`, }, }).then(res => _.get(res, 'data.result.content', []) - .map(r => r.roleName)); + .map(r => r.roleName)); } catch (err) { return Promise.reject(err); } @@ -831,7 +829,7 @@ const projectServiceUtils = { } }), - /** + /** * Send resource to kafka bus * @param {object} req Request object * @param {String} key the event key @@ -842,17 +840,17 @@ const projectServiceUtils = { * @param {Boolean}[skipNotification] if true, than event is not send to Notification Service */ sendResourceToKafkaBus: Promise.coroutine(function* (req, key, name, resource, originalResource, route, skipNotification) { // eslint-disable-line - req.log.debug('Sending event to Kafka bus for resource %s %s', name, resource.id || resource.key); - - // emit event - req.app.emit(key, { - req, - resource: _.assign({ resource: name }, resource), - originalResource: originalResource ? _.assign({ resource: name }, originalResource) : undefined, - route, - skipNotification, - }); - }), + req.log.debug('Sending event to Kafka bus for resource %s %s', name, resource.id || resource.key); + + // emit event + req.app.emit(key, { + req, + resource: _.assign({ resource: name }, resource), + originalResource: originalResource ? _.assign({ resource: name }, originalResource) : undefined, + route, + skipNotification, + }); + }), /** * Add userId to project @@ -876,44 +874,44 @@ const projectServiceUtils = { // register member return models.ProjectMember.create(member, { transaction }) - .then((_newMember) => { - newMember = _newMember.get({ plain: true }); - - // we have to remove all pending invites for the member if any, as we can add a member directly without invite - return models.ProjectMemberInvite.getPendingInviteByEmailOrUserId(member.projectId, null, newMember.userId) - .then((invite) => { - if (invite) { - return invite.update({ - status: INVITE_STATUS.CANCELED, - }, { - transaction, - }); - } - - return Promise.resolve(); - }).then(() => { + .then((_newMember) => { + newMember = _newMember.get({ plain: true }); + + // we have to remove all pending invites for the member if any, as we can add a member directly without invite + return models.ProjectMemberInvite.getPendingInviteByEmailOrUserId(member.projectId, null, newMember.userId) + .then((invite) => { + if (invite) { + return invite.update({ + status: INVITE_STATUS.CANCELED, + }, { + transaction, + }); + } + + return Promise.resolve(); + }).then(() => { // TODO Should we also send Kafka event in case we removed some invite above? - // publish event - req.app.services.pubsub.publish( - EVENT.ROUTING_KEY.PROJECT_MEMBER_ADDED, - newMember, - { correlationId: req.id }, - ); - // emit the event - util.sendResourceToKafkaBus( - req, - EVENT.ROUTING_KEY.PROJECT_MEMBER_ADDED, - RESOURCES.PROJECT_MEMBER, - newMember); + // publish event + req.app.services.pubsub.publish( + EVENT.ROUTING_KEY.PROJECT_MEMBER_ADDED, + newMember, + { correlationId: req.id }, + ); + // emit the event + util.sendResourceToKafkaBus( + req, + EVENT.ROUTING_KEY.PROJECT_MEMBER_ADDED, + RESOURCES.PROJECT_MEMBER, + newMember); return newMember; - }); - }) - .catch((err) => { - req.log.error('Unable to register ', err); - return Promise.reject(err); - }); + }); + }) + .catch((err) => { + req.log.error('Unable to register ', err); + return Promise.reject(err); + }); }), /** @@ -931,29 +929,29 @@ const projectServiceUtils = { } req.log.trace('filter for users api call', filter); return util.getM2MToken() - .then((token) => { - req.log.debug(`Bearer ${token}`); - const httpClient = util.getHttpClient({ id: req.id, log: req.log }); - return httpClient.get(`${config.get('identityServiceEndpoint')}users`, { - headers: { - Authorization: `Bearer ${token}`, - Accept: 'application/json', - 'Content-Type': 'application/json', - }, - params: { - fields: 'handle,id,email', - filter, - }, - // set longer timeout as default 3000 could be not enough for identity service response - timeout: 15000, - }) - .then((response) => { - const data = _.get(response, 'data.result.content', null); - if (!data) { throw new Error('Response does not have result.content'); } - req.log.debug('UserHandle response', data); - return data; + .then((token) => { + req.log.debug(`Bearer ${token}`); + const httpClient = util.getHttpClient({ id: req.id, log: req.log }); + return httpClient.get(`${config.get('identityServiceEndpoint')}users`, { + headers: { + Authorization: `Bearer ${token}`, + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + params: { + fields: 'handle,id,email', + filter, + }, + // set longer timeout as default 3000 could be not enough for identity service response + timeout: 15000, + }) + .then((response) => { + const data = _.get(response, 'data.result.content', null); + if (!data) { throw new Error('Response does not have result.content'); } + req.log.debug('UserHandle response', data); + return data; + }); }); - }); }, /** @@ -1001,7 +999,7 @@ const projectServiceUtils = { const start = batch * maximumRequests; const end = (batch + 1) * maximumRequests; const requests = emails.slice(start, end).map(userEmail => - generateRequest({ token, email: userEmail })); + generateRequest({ token, email: userEmail })); return Promise.all(requests) .then((responses) => { const data = responses.reduce((contents, response) => { @@ -1046,22 +1044,22 @@ const projectServiceUtils = { setPaginationHeaders: (req, res, data) => { const totalPages = Math.ceil(data.count / data.pageSize); let fullUrl = `${req.protocol}://${req.get('host')}${req.url.replace(`&page=${data.page}`, '')}`; - // URL formatting to add pagination parameters accordingly + // URL formatting to add pagination parameters accordingly if (fullUrl.indexOf('?') === -1) { fullUrl += '?'; } else { fullUrl += '&'; } - // Pagination follows github style + // Pagination follows github style if (data.count > 0) { // Set Pagination headers only if there is data to paginate let link = ''; // Content for Link header - // Set first and last page in Link header + // Set first and last page in Link header link += `<${fullUrl}page=1>; rel="first"`; link += `, <${fullUrl}page=${totalPages}>; rel="last"`; - // Set Prev-Page only if it's not first page and within page limits + // Set Prev-Page only if it's not first page and within page limits if (data.page > 1 && data.page <= totalPages) { const prevPage = (data.page - 1); res.set({ @@ -1070,7 +1068,7 @@ const projectServiceUtils = { link += `, <${fullUrl}page=${prevPage}>; rel="prev"`; } - // Set Next-Page only if it's not Last page and within page limits + // Set Next-Page only if it's not Last page and within page limits if (data.page < totalPages) { const nextPage = (_.parseInt(data.page) + 1); res.set({ @@ -1079,7 +1077,7 @@ const projectServiceUtils = { link += `, <${fullUrl}page=${nextPage}>; rel="next"`; } - // Allow browsers access pagination data in headers + // Allow browsers access pagination data in headers let accessControlExposeHeaders = res.get('Access-Control-Expose-Headers') || ''; accessControlExposeHeaders += accessControlExposeHeaders ? ', ' : ''; accessControlExposeHeaders += 'X-Page, X-Per-Page, X-Total, X-Total-Pages'; @@ -1093,7 +1091,7 @@ const projectServiceUtils = { Link: link, }); } - // Return the data after setting pagination headers + // Return the data after setting pagination headers res.json(data.rows); }, @@ -1287,7 +1285,7 @@ const projectServiceUtils = { return false; } - console.log('hasPermission', permission, user); + // console.log('hasPermission', permission, user); const allowRule = permission.allowRule ? permission.allowRule : permission; const denyRule = permission.denyRule ? permission.denyRule : null; @@ -1311,6 +1309,8 @@ const projectServiceUtils = { * Check if permission requires us to provide the list Project Members or no. * * @param {Object} permission permission or permissionRule + * + * @return {Boolean} true if has permission */ isPermissionRequireProjectMembers: (permission) => { if (!permission) { diff --git a/src/utils/permissions.js b/src/utils/permissions.js new file mode 100644 index 00000000..253318ba --- /dev/null +++ b/src/utils/permissions.js @@ -0,0 +1,45 @@ +/** + * Helper methods related to checking permissions + */ +import _ from 'lodash'; +import util from '../util'; +import { PERMISSION } from '../permissions/constants'; + +const permissionUtils = { + /** + * Check if request from the user has permission to READ attachment + * + * @param {Object} attachment attachment + * @param {express.Request} req request + * + * @returns {Boolean} true if has permission + */ + hasReadAccessToAttachment: (attachment, req) => { + if (!attachment) { + return false; + } + + const isOwnAttachment = attachment.createdBy === req.authUser.userId; + const isAllowedAttachment = attachment.allowedUsers === null || + _.includes(attachment.allowedUsers, req.authUser.userId); + + if ( + util.hasPermissionByReq(PERMISSION.READ_PROJECT_ATTACHMENT_OWN_OR_ALLOWED, req) && ( + isOwnAttachment || isAllowedAttachment + ) + ) { + return true; + } + + if ( + util.hasPermissionByReq(PERMISSION.READ_PROJECT_ATTACHMENT_NOT_OWN_AND_NOT_ALLOWED, req) && + !isOwnAttachment && !isAllowedAttachment + ) { + return true; + } + + return false; + }, +}; + +export default permissionUtils;