Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 132 additions & 0 deletions packages/backend/src/apps/cms-healthcare/actions/health-plans/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
import defineAction from '../../../../helpers/define-action.js';

const setDependents = (defaultPersonKeys, dependent,people) => {
people.push({
...defaultPersonKeys,
age: Number(dependent.age),
gender: dependent.gender,
});
};
export default defineAction({
name: 'Health Plans',
key: 'healthPlans',
description: 'Search for health Plans ',
arguments: [
{
label: 'Zip Code',
key: 'zipCode',
type: 'string',
required: true,
description: '',
},
{
label: 'Your Age',
key: 'age',
type: 'string',
required: true,
},
{
label: 'Select Gender',
key: 'gender',
type: 'dropdown',
options: [
{ label: 'Male', value: 'Male' },
{ label: 'Female', value: 'Female' },
],
required: true,
},
{
label: 'Whose in your house hold',
key: 'houseHolds',
type: 'dropdown',
options: [
{ label: 'Just You', value: 'Just You' },
{ label: 'You and other people', value: 'You and other people' },
],
required: true,
description:
'Your household includes you, your spouse if you’re married, and everyone you’ll claim as a dependent on your tax return. Include them all, even if they dont need coveragge',
additionalFields: {
type: 'query',
name: 'getDynamicFields',
arguments: [
{
name: 'key',
value: 'listHouseholds',
},
{
name: 'parameters.houseHolds',
value: '{parameters.houseHolds}',
},
],
},
},
{
label: 'Income',
key: 'income',
type: 'string',
required: true,
description:
'What do you think your household income will be in current year?',
},
],


async run($) {
const defaultPersonKeys = {
aptc_eligible: true,
has_mec: false,
is_pregnant: false,
is_parent: false,
uses_tobacco: false,
utilization_level: 'Low',
};
const locationResp = await $.http.get(
`counties/by/zip/${$.step.parameters.zipCode}`
);
const people = [
{
...defaultPersonKeys,
age: Number($.step.parameters.age),
gender: $.step.parameters.gender,
},
];
if ($.step.parameters.dependents && $.step.parameters.claimTax === 'yes') {
$.step.parameters.dependents.forEach((dependent) => {
setDependents(defaultPersonKeys,dependent,people);
});
}
if ($.step.parameters.marriedStatus === 'yes') {
setDependents(
defaultPersonKeys,
{
age: $.step.parameters.supposeAge,
gender: $.step.parameters.supposeGender,
},
people
);
}
const body = {
household: {
income: parseFloat($.step.parameters.income),
people,
has_married_couple: $.step.parameters.marriedStatus === 'yes',
},
market: 'Individual',
place: {
countyfips: locationResp.data.counties[0].fips,
state: locationResp.data.counties[0].state,
zipcode: locationResp.data.counties[0].zipcode,
},
limit: 50,
offset: 0,
order: 'asc',
year: new Date().getFullYear(),
};
const getPlans = await $.http.post(`plans/search`, body);

$.setActionItem({
raw: getPlans.data,
});
},
});
3 changes: 3 additions & 0 deletions packages/backend/src/apps/cms-healthcare/actions/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import healthPlans from "./health-plans/index.js";

export default[healthPlans]
16 changes: 16 additions & 0 deletions packages/backend/src/apps/cms-healthcare/assets/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions packages/backend/src/apps/cms-healthcare/auth/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import verifyCredentials from './verify-credentials.js';
import isStillVerified from './is-still-verified.js';

export default {
fields: [
{
key: 'screenName',
label: 'Screen Name',
type: 'string',
required: true,
readOnly: false,
value: null,
placeholder: null,
description:
'Screen name of your connection to be used on Automatisch UI.',
clickToCopy: false,
},
{
key: 'apiKey',
label: 'API Key',
type: 'string',
required: true,
readOnly: false,
value: null,
placeholder: null,
description: 'CMS Healthcare API key of your account.',
clickToCopy: false,
},
],

verifyCredentials,
isStillVerified,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import verifyCredentials from './verify-credentials.js';

const isStillVerified = async ($) => {
await verifyCredentials($);
return true;
};

export default isStillVerified;
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const verifyCredentials = async ($) => {
await $.http.get('counties/by/zip/27360');
await $.auth.set({
screenName: $.auth.data.screenName,
apiKey: $.auth.data.apiKey,
});
};

export default verifyCredentials;
11 changes: 11 additions & 0 deletions packages/backend/src/apps/cms-healthcare/common/add-auth-header.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const addAuthHeader = ($, requestConfig) => {
if ($.auth.data?.apiKey) {
requestConfig.params = {
...requestConfig.params,
apikey: $.auth.data.apiKey,
};
}
return requestConfig;
};

export default addAuthHeader;
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import listDependents from './list-dependents/index.js';
import listHouseholds from './list-households/index.js';
import listSuppose from './list-suppose/index.js';

export default [listHouseholds,listDependents,listSuppose];
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
export default {
name: 'List of Dependents',
key: 'listDependents',

async run($) {
const dependents = $.step.parameters.claimTax === 'yes';
if (dependents) {
return [
{
label: 'Dependents',
key: 'dependents',
type: 'dynamic',
required: false,
description: '',
fields: [
{
label: 'Age',
key: 'age',
type: 'string',
required: false,
dependsOn: ['parameters.dependents'],
},
{
label: 'Select Dependent Gender',
key: 'gender',
type: 'dropdown',
required: false,
options: [
{ label: 'Male', value: 'Male' },
{ label: 'Female', value: 'Female' },
],
dependsOn: ['parameters.dependents'],
},
],
},
];
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
export default {
name: 'List of Households',
key: 'listHouseholds',

async run($) {
const youAndOthers = $.step.parameters.houseHolds === 'You and other people';
if(youAndOthers){
return [
{
label: 'Are you married',
key: 'marriedStatus',
type: 'dropdown',
options: [
{ label: 'Yes', value: 'yes' },
{ label: 'No', value: 'No' },
],
description:
'Answer “Yes” if legally married. Answer “No” if divorced, legally separated, unmarried and living together, or widowed.',
required: true,
additionalFields: {
type: 'query',
name: 'getDynamicFields',
arguments: [
{
name: 'key',
value: 'listSuppose',
},
{
name: 'parameters.marriedStatus',
value: '{parameters.marriedStatus}',
},
],
},
},
{
label: 'Claim dependent fedral tax return',
key: 'claimTax',
type: 'dropdown',
options: [
{ label: 'Yes', value: 'yes' },
{ label: 'No', value: 'No' },
],
description: `Include anyone who you'll claim as a tax dependent in 2025. Include them even if they don’t need health coverage. Don't count yourself or your spouse as a dependent.`,
required: false,
additionalFields: {
type: 'query',
name: 'getDynamicFields',
arguments: [
{
name: 'key',
value: 'listDependents',
},
{
name: 'parameters.claimTax',
value: '{parameters.claimTax}',
},
],
},
},
];
}
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
export default {
name: 'List of Suppose',
key: 'listSuppose',

async run($) {
const isMarried = $.step.parameters.marriedStatus === 'yes'
if(isMarried){
return [
{
label: 'Age',
key: 'supposeAge',
type: 'string',
required: false,
description: 'Enter your suppose age'
},
{
label: 'Select Dependent Gender',
key: 'supposeGender',
type: 'dropdown',
required: false,
options: [
{ label: 'Male', value: 'Male' },
{ label: 'Female', value: 'Female' },
],
description: 'Enter your suppose gender'
},
];
}
},
};
20 changes: 20 additions & 0 deletions packages/backend/src/apps/cms-healthcare/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import defineApp from '../../helpers/define-app.js';
import addAuthHeader from './common/add-auth-header.js';
import auth from './auth/index.js';
import dynamicFields from './dynamic-fields/index.js';
import actions from './actions/index.js';

export default defineApp({
name: 'CMS Healthcare',
key: 'cms-healthcare',
iconUrl: '{BASE_URL}/apps/cms-healthcare/assets/favicon.svg',
authDocUrl: '',
supportsConnections: true,
baseUrl: 'https://marketplace.api.healthcare.gov/',
apiBaseUrl: 'https://marketplace.api.healthcare.gov/api/v1/',
primaryColor: '#6f42c1',
beforeRequest: [addAuthHeader],
auth,
actions,
dynamicFields,
});