Git Product home page Git Product logo

civiform / civiform Goto Github PK

View Code? Open in Web Editor NEW
84.0 20.0 55.0 468.44 MB

CiviForm simplifies the application process for government benefits programs by re-using applicant data for multiple benefits applications. It's being developed by Google.org and Exygy, in collaboration with the City of Seattle and community contributors.

Home Page: https://civiform.us

License: Apache License 2.0

Dockerfile 0.15% Shell 1.19% Java 80.46% Scala 0.28% JavaScript 0.15% CSS 0.04% TypeScript 14.68% Python 2.37% PLpgSQL 0.08% Jinja 0.03% SCSS 0.03% HTML 0.53%
seattle civic-tech government public-interest-technology

civiform's Introduction

ci CII Best Practices AWS Staging Deploy codecov.io Code Style: Google

CiviForm

CiviForm aims to simplify the application process for benefits programs by re-using applicant data for multiple benefits applications. It is being developed by Google.org in collaboration with Exygy and the City of Seattle.

Key features:

  • No-code questionnaire definitions: admins can add new questions and programs using the UI without the need for custom code
  • No-code conditional logic for eligibility requirements
  • No-code multi-language support through the admin UI
  • Address correction and service area validation
  • Bulk data export with admin-defined privacy settings to preserve applicant privacy
  • Trusted intermediary role to enable community based organizations to manage applications on behalf of clients
  • Recursive data model: admins can define repeated and recursive questions for nested data such as asking for each address for each employer of each member of a household

Contributing

To get started please first read our Technical contribution guide.

If you're interested in just digging around and interacting with the code, see Getting started for guidance on setting up your environment and running a local development server.

civiform's People

Contributors

avaleske avatar awbaumann avatar azhangggggg avatar azizova-leyla avatar bion avatar caitlinshk avatar carolinedanzi avatar dkatzz avatar goldblatt avatar greg-hyde avatar gwendolyngoetz avatar hmhsu avatar jeanniefu avatar kendrickt avatar kmcnellis avatar leylacodes avatar melanie-exygy avatar michaelzetune avatar nat-henderson avatar natsid avatar nb1701 avatar nbeloglazov avatar reemaka avatar renovate[bot] avatar rockycodes avatar shanemc-goog avatar shubha-rajan avatar swatkat1 avatar transifex-integration[bot] avatar yotommy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

civiform's Issues

Update Java unit tests to use Truth and match implementation files

We want to:

  1. Use Truth instead of AssertJ (current) for fluent assertions
  2. Mirror the directory structure for Java unit tests (ex: /app/my/path/MyClass.java has unit tests under /tests/my/path/MyClassTest.java)

Done when:
a) Our current unit tests are in files that mirror their implementation classes
b) Current tests use Truth rather than AssertJ

Decide on Frontend stack

Done when this doc has a final list of decided-upon technologies.

We should choose something for each of the following:

  • language and possibly a framework
  • package manager
  • styles language
  • unit testing framework
  • module bundler

Create program service facade

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
Create a Java interface for the internal program service.

Something along the lines of

interface ProgramService {
  ImmutableList<ProgramDefinition> listProgramDefinitions();

  ProgramDefinition getProgramDefinition(String programId);

  // also create, update, destroy ProgramDefinition

 // may also include CRUD for block actions
}

Additional context
This is how the program service controllers and applicant service will interact with the program service.

Done when
Done when the interface is available in the UAT server.

Look into adding ErrorProne to the project

Error Prone is a static analysis tool for Java that catches common programming mistakes at compile-time. It's designed for plug-and-play usage with several build systems that are not the one we're using. This task is to take a look at it and get an idea of how much work it'd be to set up for our project. If it ends up being fairly straightforward, go ahead and do it.

Add newcomers' contribution guide to README

We want to make it as easy as possible for newcomers (e.g. city employees, other civic groups, the general public, etc.) to contribute code and ideas to this project. Write a few paragraphs in the README (or make a separate CONTRIBUTING.md doc) to teach people how to do this.

Include:

  • How we do project management
  • Etiquette for contributing (using issue templates, asking someone for review, etc.)
  • Best places to look if you want to get started

(Tech stack is already included in great detail, so no need to add more.)

Decide how we will integrate with Oracle IDCS

Oracle IDCS has support for OAuth 2.0, OpenID Connect, SAML, SDK, and REST. We should select a method that works well with Play, is supported by the City, and provides flexibility for other civic entities to use with their authentication systems.

Done when we have documented which method we will use for the integration

Create Question service facade

Create a Java interface for the internal question service.

Something along the lines of

interface QuestionService {
  // create, update, list, get question definitions
  // get question definition for path
}

Additional context
This is how the question service controllers, program service, and applicant service will interact with the question service.

Done when
Done when the interface is available in the UAT server.

Fix slow first request to dev server

The development server takes quite a while to serve its first response because it waits to compile until it's received its first request. Investigate the cause of this and find a solution that either reduces the compilation time or does it on initial server start and gets it out of the way.

Done when: serving the first request request does not require waiting for recompilation

Create an initial page that can write something to the database

We should create an initial functional page to figure out all the parts involved with setting that up.

This page can be a "Create a new application" page for the UAT admin role that saves the name of the new application, e.g.

Off the top of my head, we'll need:

  • a twirl template file
  • a controller
  • routing config
  • ebean class(es)
  • some TS (just to prove to ourselves that we can get that working)
  • some other stuff I'm likely missing

Create `ProgramDefinition` class

Additional context
Represents a program as configured by the admin. Has many BlockDefinitions.

Done when
The ProgramDefinition class is available in the UAT server.

Add value proposition to README

Explain why cities should adopt our product, and what advantages it has over all the other "benefits application portals" that various civic groups have created throughout the years. Ideally, should also explain why other civic tech groups should start working on this project.

Write a few paragraphs at the start of the README explaining the value prop to newcomers.

Create `BlockDefinition` class

Additional context
This will help unblock applicant service work.

Done when
A BlockDefinition class exists that represents a block the admin has configured in a specific program.

Admin can view question form

This form allows an admin to create a new question (i.e. a QuestionDefinition) using the NAME question type.

  • Simple text input field for question path for now
  • question and help text are only for english locale
  • question type selected from dropdown
  • version hard-coded to "1" for now
  • no tags

Done when admin can view the question form.

Set up initial TypeScript unit test

Once we decide on a unit test framework (probably either Jest or Jasmine), we should write a test as an example, both to encourage writing tests with code from the start, and to get TS tests set up with our CI.

Done when we have a passing TypeScript unit test that runs as part of our CI.

Test Epic

This is an epic that I created from ZenHub.

Create flowchart of user journeys

Show the various screens of the app (not wireframes; just boxes & arrows is fine) and how each user group will move through them.

Admin can view program form

Blocked on #97, #98

Describe the solution you'd like
Admin can view a form for creating a new program. For now that form only has fields for the program name and description.

Done when
Admin can view the form

Set up TypeScript compilation support

The main task here is to add the addSbtPlugin line from here, but it's worth reading through the rest of the steps there and configuring anything else we think we'll need. I chose that particular plugin based on the link in this sbt Reference Manual.

(I mostly created this task in order to try out the flow of creating a GitHub issue and then associating it with a PR).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.