VB-MAPP Server REST API

REST Authentication

Obtaining the Session Token

All VB-Mapp Content Server REST API calls require an authorization token to allow access to the server.

Formatting the REST Request

Required Headers

The REST Request should have the following HTTP headers defined:

  • Authorization: Token token="<your session token here>"
  • Content-Type: application/json
  • User-Agent: dmid-rest-api
  • X-ClientId: <the client id here>
  • X-ClientCode: <the client code here>

Optional Headers

The REST Request may have the following HTTP headers defined:

  • Accept-Language: <language> – Currently 'en' (English), 'es' (Spanish) and 'fr' (French) are supported


The 'X-ClientId' and 'X-ClientCode' header is not required on all requests.  However, when they are required either of the two may be provided to authenticate the call, both are not simultaneously required.

X-ClientCode equates the code field that is provided when the client record is created. This allows you to store a unique value in the code field, for example your primary key, and thus no changes to your data model are required to integrate the REST service.

Example

Here is an example curl script that uses the session token as seen in the above illustration:

curl -X GET \
-H 'Authorization: Token token="c1b297a8e1fda144588ee1f9ce23b23a"' \
-H "Accept: application/json" \
-H "User-Agent: dmtd-reset-api" \
-H "Content-Type: application/json" \
-H "X-ClientId: 1" \
-H "Accept-Language: en" \
http://api-sandbox.datamtd.com/1/vbmapp/index



REST Content Formatting

The Guide and Protocol controllers allow for the specification of the format of the resulting content.  At this time, two formats are supported: HTML and Plain Text.

The format is chosen by specifying the X-DocType header as either 'text' or 'html'.  The default format is HTML.


HTML Format


When the HTML format is specified, or no X-DocType is specified, the resulting text embedded in the various JSON nodes will contain text formatted as HTML.  This allows for complete styling of the resulting text.

HTML Styles

A Cascading Style Sheet for the styles used can be found at:  https://s3.amazonaws.com/vbmappapp/assets/vbmapp.css

Plain Text Format

When the Plain Text format is specified, the resulting JSON nodes will contain text that is only formatted with only line feeds (LF - 0x0A) and horizontal tab (TAB - 0x09) characters for formatting.

REST End Points

/1/clients - POST

Overview

The /1/clients endpoint provides for creation of new clients.  For each separate client that creates a VB-Mapp a new client must be created.

Reqiured Headers

  • Authorization: Token token="<your session token here>"
  • User-Agent: dmtd-rest-api
  • Content-Type: application/json

Fields

FieldTypeOptionalDescription
id32-bit IntegerN/AUnique client identifier
codeStringOptionalA unique code that correlates the student to an external database and/or obfuscates the student's name
date_of_birthDateRequireddate of birth of the client
diagnosisStringOptional
first_nameStringOptional
last_nameStringOptional
gender32-bit IntegerRequired1 = male, 2 = female
organization_id32-bit IntegerRequiredAn id the identifies the organization that the client is created for.
settingsStringOptionalAny information associated with the client

Example

curl -X POST \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "Accept: application/json" \
-H "User-Agent: dmtd-rest-api" \
-H "Content-Type: application/json" \
-d '{ "object" : { "code" : "unique code 3", "date_of_birth" : "2014-01-01", "gender" : 1, "organization_id" : 1, "settings" : "anything you want here" } }' \
https://api-sandbox.datamtd.com/1/clients


Response

{
  "response": {
    "id": 439,
    "organization_id": 1,
    "code": "unique code 3",
    "date_of_birth": "2014-01-01",
    "diagnosis": null,
    "first_name": null,
    "gender": 1,
    "last_name": null,
    "created_at": "2015-05-06T14:56:53.729Z",
    "updated_at": "2015-05-06T14:56:53.729Z",
    "settings": "anything you want here",
    "color": null
  }
}

/1/clients - GET

Overview

The /1/clients endpoint provides for the examination of already created clients.

Required Headers

  • Authorization: Token token="<your session token here>"
  • User-Agent: dmtd-rest-api
  • Content-Type: application/json

Arguments

NameTypeOptionalDescription
organization_idIntegerRequiredThe organization identifier

Example

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "Accept: application/json" \
-H "User-Agent: dmtd-rest-api" \
-H "Content-Type: application/json" \
https://api-sandbox.datamtd.com/1/clients?organization_id=1

Response

{
  "response": [
    {
      "id": 1,
      "organization_id": 1,
      "code": null,
      "date_of_birth": "2015-04-30",
      "diagnosis": null,
      "first_name": null,
      "gender": 1,
      "last_name": null,
      "created_at": "2015-04-30T14:15:19.000Z",
      "updated_at": "2015-04-30T14:15:19.000Z",
      "settings": null,
      "color": null
    },
    {
      "id": 2,
      "organization_id": 1,
      "code": null,
      "date_of_birth": "2015-04-30",
      "diagnosis": null,
      "first_name": null,
      "gender": 2,
      "last_name": null,
      "created_at": "2015-04-30T14:15:19.000Z",
      "updated_at": "2015-04-30T14:15:19.000Z",
      "settings": null,
      "color": null
    },
...
  ],
  "count": 56
}

/1/guide/index - GET

Overview

The /1/guide/index endpoint returns the structure of the VB-Mapp guide.  The guide is divided as follows:

  • Chapters
  • Each chapter has sections
  • Each section can have sub sections

The response to this endpoint contains an array of chapters, each of which in-turn contains the sections.

This information is used to query the remaining /1/guide/... APIs.

Required Headers

  • Authorization: Token token="<your session token here>"
  • User-Agent: dmtd-rest-api
  • Content-Type: application/json

Optional Headers

Chapter Fields

FieldTypeOptionalDescription
sectionsArrayRequiredAn array of sections in the chapter
titlestringRequiredThis is equal to title from /1/guide/chapter - GET

Section Fields

FieldTypeOptionalDescription
title
StringRequiredThis is equal to title from  /1/guide/section - GET 



Example

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "Accept: application/json" \
-H "User-Agent: dmtd-rest-api" \
-H "Content-Type: application/json" \
https://api-sandbox.datamtd.com/1/guide/index

Response


{
  "response": [
    {
      "sections": [
        
      ],
      "title": "Acknowledgements"
    },
    {
      "sections": [
        {
          "title": "About the VB-MAPP"
        },
        {
          "title": "Research Using the VB-MAPP"
        },
        {
          "title": "The Importance of Assessment"
        },
...
      ],
      "title": "Task Analysis and Skills Tracking: Level 3 (30-48 Months)"
    }
  ],
  "count": 16
}

Special Considerations

We reserve the right to alter the results of this index over time as updates to the guide are incorporated. Thus, it is very important that the results of this call are not cached for an indefinite period of time.

To reduce the chatter between servers, it is acceptable to cache this information during a single week period from 6am GMT Monday to 6am GMT Saturday. Any updates to the structures will be done between 6am GMT Saturday and 6am GMT Monday.

/1/guide/chapter - GET

Overview

The /1/guide/chapter endpoint provides access to the guide's chapter content.

Required Headers

  • Authorization: Token token="<your session token here>"
  • Content-Type: application/json
  • User-Agent: dmtd-rest-api
  • X-ClientId: <the client id here> or X-ClientCode: <the client code here>

Optional Headers

Arguments

FieldTypeOptionalDescription
chapter_num32-bit IntegerRequiredOne of the chapter numbers from (0..chapter count - 1) retrieved from the /1/guide/index - GET endpoint

Fields

FieldTypeOptionalDescription
content
stringRequired
title
stringRequired

Example

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "Accept: application/json" \
-H "User-Agent: dmtd-rest-api" \
-H "Content-Type: application/json" \
-H "X-ClientId: 1" \
https://api-sandbox.datamtd.com/1/guide/chapter?chapter_num=0

Response

{
  "response": {
    "title": "Acknowledgements",
    "content": "B. F. Skinner's groundbreaking analysis of human behavior (1953) and language (1957) ...  <p>Mark L. Sundberg<p>May, 2014 "
  }
}

/1/guide/section - GET

Overview

The /1/guide/section endpoint provides access to the guide chapter's section content.

Required Headers

  • Authorization: Token token="<your session token here>"
  • Content-Type: application/json
  • User-Agent: dmtd-rest-api
  • X-ClientId: <the client id here> or X-ClientCode: <the client code here>


Optional Headers

Arguments

FieldTypeOptionalDescription
chapter_num32-bit IntegerRequiredOne of the chapter numbers from (0..chapter count - 1) retrieved from the /1/guide/index - GET endpoint
section_num32-bit IntegerRequiredOne of the chapter numbers from (0..section count - 1) retrieved from the /1/guide/index - GET endpoint

Fields

FieldTypeOptionalDescription
content
stringRequired
title
stringRequired

Example

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "Accept: application/json" \
-H "User-Agent: dmtd-rest-api" \
-H "Content-Type: application/json" \
-H "X-ClientId: 1" \
https://api-sandbox.datamtd.com/1/guide/section?chapter_num=1\&section_num=0

Response

{
  "response": {
    "content": "There are five components of the VB-MAPP presented in this Guide. The first is the <B>VB-MAPP Milestones Assessment</B>, ... necessary intervention are included. ",
    "title": "About the VB-MAPP"
  }
}

/1/guide/sub_section - GET

Unable to render {include} The included page could not be found.

/1/vbmapp/index - GET

Overview

The /1/protocol/index endpoint returns the structure of the VB-Mapp assessment.  An assessment is divided as follows:

  • An assessment is broken down into areas: milestones, barriers, transitions, eesa.
  • Each area has groups: mand, tact, group1, etc.
  • Each group has questions

The response to this endpoint contains a list of areas, each of which in-turn contains the groups and each group contains the number of questions in that group.

This information is used to query the remaining /1/... APIs.

Required Headers

  • Authorization: Token token="<your session token here>"
  • User-Agent: dmtd-rest-api
  • Content-Type: application/json
  • X-ClientId: <the client id here> or X-ClientCode: <the client code here>

Area Fields

FieldTypeOptionalDescription
areastringRequiredA unique identifier for the area ('milestones', 'barriers', 'transitions', 'eesa')
groupsarrayRequiredAn array of group objects

Group Fields

FieldTypeOptionalDescription
groupstringRequiredAn identifier for the group
question_count32-bit IntegerRequiredThe number of questions in the group
levelsarrayOptionalAn array of level objects

Level Fields

Levels are a sub-grouping of the group's questions. The information provided by 'Level Fields' is simply an alternate way to group the questions. This sub-grouping is only used by the 'milestones' areas (i.e. 'Level 1', 'Level 2', 'Level 3').

FieldTypeOptionalDescription
levelstringRequiredAn identifier for the level
start_question_num32-bit IntegerRequiredThe question_num (0..Group.question_count-1) in the group's questions that begins the level
question_count32-bit IntegerRequiredThe number of questions in the level
skill_countsarray of 32-bit IntegerOptionalThe number of Task Analysis skills for each Milestone question. Required when area == 'milestones'

Example

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "User-Agent: dmtd-rest-api" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-ClientId: 1" \
https://api-sandbox.datamtd.com/1/protocol/index

Response

{
  "response": [
    {
      "area": "milestones",
      "groups": [
        {
          "group": "mand",
          "question_count": 15,
          "levels": [
            {
              "level": "level1",
              "start_question_num": 0,
              "question_count": 5,
              "skill_counts": [4, 5, 4, 5, 5]
            },
            {
              "level": "level2",
              "start_question_num": 5,
              "question_count": 5
              "skill_counts": [5, 7, 6, 6, 6]
            },
            {
              "level": "level3",
              "start_question_num": 10,
              "question_count": 5,
              "skill_counts": [5, 5, 6, 4, 5]
            }
          ]
        },
        {
          "group": "tact",
          "question_count": 15,
          "levels": [
            {
              "level": "level1",
              "start_question_num": 0,
              "question_count": 5,
              "skill_counts": [1, 0, 2, 2, 3]
            },
            {
              "level": "level2",
              "start_question_num": 5,
              "question_count": 5,
              "skill_counts": [4, 5, 4, 5, 5]
            },
            {
              "level": "level3",
              "start_question_num": 10,
              "question_count": 5,
              "skill_counts": [9, 7, 6, 5, 7]
            }
          ]
        },
...
  ],
  "count": 4
}


/1/vbmapp/area_question - GET

Overview

Required Headers

  • Authorization: Token token="<your session token here>"
  • User-Agent: dmtd-rest-api
  • Content-Type: application/json
  • X-ClientId: <the client id here> or X-ClientCode: <the client code here>

Optional Headers

Arguments

FieldTypeOptionalDescription
areastringRequiredOne of the area strings retrieved from the /1/protocol/index endpoint
groupstringRequiredOne of the group strings retrieved from the /1/protocol/index endpoint
question_num32-bit IntegerOptional

The number of the question that must be 0..question_count-1 of the question_count field retrieved from the /1/protocol/index endpoint.

If question_num is omitted, the result will be an array containing all of the question entries for the given area and group.

Fields

FieldTypeOptionalDescription
definitionstringRequiredA formal definition for the question. Deprecated, use text
examplestringOptionalAn example of how the question might be administered. Required when area == 'milestones'
materialsstringOptionalInformation about what materials might be required to administer the question. Required when area == 'milestones'
objectivestringOptionalThe objective of the question. Required when area == 'milestones'
number32-bit IntegerOptional

The question # from the guide. Required when area == 'milestones', 'barriers', 'transitions'

Note: This is not the same as question_num, which is the programmatic index of the question. This is what to display to the user to related the question to the guide.

level32-bit IntegerOptionalThe question level # from the guide. Required when area == 'milestones'
textstringRequiredThe text that describes the question
titlestringOptional

The text to display at the top of a grid column for Barriers & Transitions. Required when area == 'barriers', 'transitions'

responsesarrayRequiredAn array of response/score definitions
skillsarrayOptionalThe Task Analysis skills associated with the milestone question. Required when area == 'milestones'

response Fields

FieldTypeOptionalDescription
scoreSingle Precision FloatRequiredValue to store as a score if this response is selected
textstringRequiredA string to display that describes this possible response
descriptionstringOptionalA description of the score to further help identify its application

skills Fields

FieldTypeOptionalDescription
idstringRequiredThe skill identifier (e.g. '1-a')
skillstringRequiredA string to display that describes the skill
supportingbooleanRequiredtrue/false as to whether this is a 'supporting' skill (identified in assessment with a '*' after the skill id, e.g. '2-a*')

Example

Example 1 - question_num provided

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "User-Agent: dmtd-rest-api" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-ClientId: 1" \
https://api-sandbox.datamtd.com/1/protocol/area_question?area=milestones\&group=mand\&question_num=1

Example 2 - question_num omitted

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "User-Agent: dmtd-rest-api" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-ClientId: 1" \
https://api-sandbox.datmtd.com/1/protocol/area_question?area=milestones\&group=mand

Response

Example 1
{
  "response": {
    "example": "A child says or signs \u201cswing\u201d when he is on a swing and wants to be pushed, and he does so without an echoic or imitative prompt.",
    "materials": "Gather items or plan actions that function as reinforcement for the child.",
    "objective": "To determine if a child mands with echoic prompts.  For a child ... necessary.",
    "number": 2,
    "text": "Emits 4 different mands without prompts (except, What do you want?) the desired item can be present (e.g., music, Slinky, ball)  Either testing or observation",
    "title": null,
    "responses": [
      {
        "score": 0,
        "text": "Score 0 Points",
        "description": ""
      },
      {
        "score": 0.5,
        "text": "Score 1\/2 Point",
        "description": ""
      },
      {
        "score": 1,
        "text": "Score 1 Point",
        "description": "Give the child 1 point if he mands for 4 different reinforcers ... (or something similar)."
      }
    ],
    "skills": [
      { "skill": "2-a",
        "text": "Points to 2 different reinforcers in order to obtain them 2 times (E)"
      },
      { "skill: "2-b",
        "text": "Nods or says yes or no when offered a reinforcer 2 times (not an early target) (E)"
	  }, ...
    ]
  }
}

Example 2
{
  "response": [
    {
      "example": "A child says or signs \u201cswing\u201d when he is on a swing and wants to be pushed, and he does so without an echoic or imitative prompt.",
      "materials": "Gather items or plan actions that function as reinforcement for the child.",
      "objective": "To determine if a child mands with echoic prompts.  For a child ... necessary.",
      "number": 2,
      "text": "Emits 4 different mands without prompts (except, What do you want?) the desired item can be present (e.g., music, Slinky, ball)  Either testing or observation",
      "title": null,
      "responses": [
        {
          "score": 0,
          "text": "Score 0 Points",
          "description": ""
        },
        {
          "score": 0.5,
          "text": "Score 1\/2 Point",
          "description": "Give the child \u00bd point if he only emits 1 mand."
        },
        {
          "score": 1,
          "text": "Score 1 Point",
          "description": "Give the child 1 point if ... icon."
        }
      ],
      "skills": [
        { "skill": "2-a",
          "text": "Points to 2 different reinforcers in order to obtain them 2 times (E)"
        },
        { "skill: "2-b",
          "text": "Nods or says yes or no when offered a reinforcer 2 times (not an early target) (E)"
	    }, ...
      ]
  }
    },
{
  "response": [
    {
      "example": null,
      "materials": "Gather items or plan actions that function as reinforcement for the child.",
      "objective": "To determine if a child mands with echoic prompts. For a child using ... be necessary.",
      "number": 1,
      "text": "Emits 2 words, signs, or PECS, but may require echoic, imitative, or other prompts, but no physical prompts (e.g., cracker, book)  Either testing or observation",
      "title": null,
      "responses": [
        {
          "score": 0,
          "text": "Score 0 Points",
          "description": ""
        },
        {
          "score": 0.5,
          "text": "Score 1\/2 Point",
          "description": ""
        },
        {
          "score": 1,
          "text": "Score 1 Point",
          "description": "Give the child 1 point if he responds when an adult provides an ... or icon."
        }
      ]
    },
    {
      "definition": "Emits 4 different mands without prompts (except, What do you want?) the desired item can be present (e.g., music, Slinky, ball). (E)",
      "example": "A child says or signs \u201cswing\u201d when he is on a swing and wants to be pushed, and he does so without an echoic or imitative prompt.",
      "materials": "Gather items or plan actions that function as reinforcement for the child.",
      "objective": "To determine if a child mands with echoic prompts.  For a child using ... necessary.",
      "number": 2,
      "text": "Emits 4 different mands without prompts (except, What do you want?) the desired item can be present (e.g., music, Slinky, ball)  Either testing or observation",
      "title": null,
      "responses": [
        {
          "score": 0,
          "text": "Score 0 Points",
          "description": ""
        },
        {
          "score": 0.5,
          "text": "Score 1\/2 Point",
          "description": ""
        },
        {
          "score": 1,
          "text": "Score 1 Point",
          "description": "Give the child 1 point if he mands for 4 different reinforcers ... similar)."
        }
      ]
    },
  ...
  ],
  "count" : 15
}

/1/assessment_report/iep - GET

Overview

The /1/assessment_report/iep endpoint returns the structure of the VB-Mapp IEP Assessment Report.

The response to this endpoint contains a list of paragraph descriptors.

Required Headers

  • Authorization: Token token="<your session token here>"
  • Content-Type: application/json
  • User-Agent: dmtd-rest-api
  • X-ClientId: <the client id here>

Optional Headers

Paragraph Descriptor Fields

FieldTypeOptionalDescription
StyleStringRequiredThe paragraph style  
ConditionStringOptionalAn expression that determines if the paragraph belongs in the report
Condition_CommentStringOptionalA free-form comment describing the Condition field
TextStringRequiredThe paragraph's text, which might contain %SUBSTITUTION_FIELD%s

Paragraph Descriptor Styles

The following table lists the various styles that can be used to apply common styling across the generated document.

ValueDescription
H1Heading #1
H1NBHeading #1, but not emphasized (bold)
H2Heading #2
H3Heading #3
IndentNormal paragraph, but shifted to the right
IntroNormal paragraph style, in the introduction. Can have alternate styling, if needed.
ListBullet list
WarnAdds emphasis to highlight something to the user
NormalNormal paragraph style

Condition Grammar

The grammar for conditions is very trivial. It's simply: "expr op expr".

The Flex lexical description looks as follows:

 

[ \t\n]                          { /* skip spaces */ }
\%([a-zA-Z_][a-zA-Z0-9_]*)\%     { yylval.string = yytext; return IDENTIFIER; }
[0-9]*                           { yylval.string = yytext; return INTEGER_LITERAL; }
\<=                              { return LT; }
\<=                              { return LTE; }
==                               { return EQ; }
\>=                              { return GT; }
\>=                              { return GTE; }
.                                { yyerror("Unknown token: %s", yytext); yyterminate(); }

A Bison grammar looks as follows:

binary_expr
    : /* empty */
    | value LT value
    | value LTE value
    | value EQ value
    | value GT value
    | value GTE value
;
 
value
    : IDENTIFIER
    | INTEGER_LITERAL
;

Example

curl -X GET \
-H 'Authorization: Token token="9319224d0002e7a32b26c0686c42a0bf"' \
-H "Accept: application/json" \
-H "User-Agent: dmtd-rest-api" \
-H "Content-Type: application/json" \
-H "X-ClientId: 1" \
https://api-sandbox.datamtd.com/1/assessment_report/iep

Response

{
  "response": [
    {
      "Style": "H1",
      "Text": "VB-MAPP Language Milestones, Barriers and EESA Assessment"
    },
    {
      "Style": "Intro",
      "Text": "Name: %STUDENT_FULL_NAME%"
    },
    {
      "Style": "Intro",
      "Text": "Date of Birth: Jan 01, 2014"
    },
    {
      "Style": "Intro",
      "Text": "Age: 1"
    },
    {
      "Style": "Intro",
      "Text": "Assessment Date: %STUDENT_ASSESSMENT_DATES%"
    },
    {
      "Style": "Intro",
      "Text": "Report Date: Dec 13, 2014"
    },
    {
      "Style": "Intro",
      "Text": "Assessor: %STUDENT_ASSESSOR%"
    },
    {
      "Style": "H1NB",
      "Text": "General Information"
    },
...
    {
      "Style": "Normal",
      "Condition_Comment": "If the highest milestone the child scores 1 point in Listener is milestone 1",
      "Condition": "%ASSESSMENT_MILESTONE_LISTENER_HIGHEST1POINTSCORE% == 1",
      "Text": "Once a child begins to attend to speech sounds, the next task is to get different responses under the control of different sounds. This, of course, is the main activity of standard listener discrimination (LD) training (also identified as receptive labeling). The focus for this child might be to just get him to attend to his own name, or the name of a favorite person, pet, or character (e.g., \"There's Big Bird!\"). A variety of additional activities for developing listener skills can be found in the VB-MAPP Listener Task Analysis."
    },
    {
      "Style": "Normal",
      "Condition_Comment": "If the highest milestone the child scores 1 point in Listener is milestone 2",
      "Condition": "%ASSESSMENT_MILESTONE_LISTENER_HIGHEST1POINTSCORE% == 2",
      "Text": "The focus for a child who does attend to his own name and perhaps a few other verbal stimuli is to increase the number of listener discriminations that he is able to make. Again, procedures that establish attending to favorite items should be the focus of the intervention at this point. This child may also be ready for more intensive listener training, perhaps beginning with listener discriminations that involve only two stimuli in an array (e.g., responding to, \"Where's Cookie Monster?\" when shown Cookie Monster and a cat)."
    },
    {
      "Style": "Normal",
      "Condition_Comment": "If the highest milestone the child scores 1 point in Listener is milestone 3",
      "Condition": "%ASSESSMENT_MILESTONE_LISTENER_HIGHEST1POINTSCORE% == 3",
      "Text": "Reaching this milestone means a child has begun to differentially respond to verbal stimuli as demonstrated by identifying specific items during testing. The focus should now be on (1) increasing the number of items the child is able to identify as a listener, (2) begin generalization to different people, settings, and materials, etc., (3) beginning work on emitting specific motor actions on command, and (4) increasing the number of items in a visual array."
    },
    {
      "Style": "Normal",
      "ConditionC_Comment": "If the highest milestone the child scores 1 point in Listener is milestone 4",
      "Condition": "%ASSESSMENT_MILESTONE_LISTENER_HIGHEST1POINTSCORE% == 4",
      "Text": "A score at this level suggests that listener training should become a significant part of the child's daily intervention program, along with mands, tacts, and social behavior. The other skills are clearly important, but not as critical as these four skills are for a child whose scores begin to reach the top of Level 1. At this point in the intervention program the focus should be on (1) increasing the number of items the child is able to identify as a listener, (2) increasing the number of items in a visual array\u2014more extensive use of pictures and the use of picture books, (3) an increased effort to generalize to different materials, (4) an increase in training on actions, and (5) more LD training in the natural environment and in the context of social games and social interaction."
    },
...
    {
      "Style": "Normal",
      "Text": "Sundberg, M. L., & Partington, J. W. (1998). Teaching language to children with autism or other developmental disabilities. Concord, CA: AVB Press."
    }
  ],
  "count": 687
}

Appendix

Scoring

Scoring the VB-MAPP is done by evaluating each question from the /1/protocol/area_question - GET api.  The result of the area_question api contains a responses field, which is an array of possible responses for that particular question.  For example, here is the response from the REST api for Milestone/MAND/1:

Milestone-MAND-1

{
  "response": {
    "example": "A child says or signs \u201cswing\u201d when he is on a swing and wants to be pushed, and he does so without an echoic or imitative prompt.",
    "guideContent": {
      "code": "Mand 1-M",
      "definition": "Emits 4 different mands without prompts (except, What do you want?) the desired item can be present (e.g., music, Slinky, ball). (E)",
      "examples": "A child says or signs \u201cswing\u201d when he is on a swing and wants to be pushed, and he does so without an echoic or imitative prompt.",
      "guidePageNumber": 27,
      "halfPointScoreDefinition": "Give the child \u00bd point if he emits 3 of these types of mands.",
      "level": 1,
      "materials": "Gather items or plan actions that function as reinforcement for the child.",
      "objective": "To determine if a child mands with echoic prompts.  For a child using sign language or a child selecting pictures, can the child mand with imitative or pointing prompts?  If early manding is weak, limited, or typically requires physical prompting, a more careful assessment of the child's exact level will be necessary.",
      "onePointScoreDefinition": "Give the child 1 point if he mands for 4 different reinforcers without the adult saying the target word (echoic prompt), giving an imitative or pointing prompt, or for a child using signs, speaking the word (intraverbal prompt). The desired item or activity can be present, as well as the verbal prompt, \u201cWhat do you want?\u201d (or something similar).",
      "title": "Mand - Level 1"
    },
    "guidePageNumber": 27,
    "materials": "Gather items or plan actions that function as reinforcement for the child.",
    "questionNumber": 2,
    "questionText": "Emits 4 different mands without prompts (except, What do you want?) the desired item can be present (e.g., music, Slinky, ball)\n\n                Either testing or observation",
    "questionType": "E",
    "responses": [
      {
        "score": 0,
        "text": "Score 0 Points"
      },
      {
        "score": 0.5,
        "text": "Score 1\/2 Point"
      },
      {
        "score": 1,
        "text": "Score 1 Point"
      }
    ]
  }
}

The user can be prompted with the information found in the questionText field and then asked to select from 1 of the 3 possible responses provided in the text field of each possible response.  When the selection is made, the corresponding score value should be stored.  Typically, the best way to store these question-response pairs is in a dictionary with the key being a compound value of area:group:question# and then then value being an integer of the score chosen.  For example:

Score JSON Example

{

"milestones" : {

"mand" : [

0,

1,

0.5,

...

]

}

"barriers" : {

"group1" : [

"values" :

]

},

...

}

These values are then used by the reporting modules.  See IEP - Variable Definitions for further information.

IEP - Variable Definitions

Overview

The /1/assessment_report/iep endpoint returns the structure of the VB-Mapp IEP Assessment Report.  That report contains multiple variables that need to be substituted by the consumer of the report.

Some of the variable bindings are a bit difficult to describe so we've provided a reference implementation: assessment_report_binder.rb

IEP Report Variables

The following table lists the variables that need to be bound:

VariableReference Implementation MethodAcceptable ValuesDescription

ASSESSMENT_MILESTONE_OVERALL_SCORE

 merged_milestone_score0..170The sum of all of the milestone scores (see also: ASSESSMENT_MILESTONE_<GROUP>_SCORE)

ASSESSMENT_MILESTONE_LEVEL_ACHIEVED

bind_milestone_variable
1, 2, 3

Based on ASSESSMENT_MILESTONE_OVERALL_SCORE:

  • <= 45 – '1'
  • <= 105 – '2'
  • > 105 – '3' 

ASSESSMENT_MILESTONE_SKIPPED_DOMAINS

bind_milestone_variable
Localized list of skipped group names, for example:

"Mand, Tact" 
A group is considered 'skipped' if there are no recorded scores for the entire group. Note that even a value of 0 is considered recorded, so this case is where no input at all was taken for the group.

ASSESSMENT_MILESTONE_<GROUP>_SCORE

milestone_score
 0..question_countEach MILESTONE question is scored as one of 0, 0.5 or 1. The group score is the sum of all of the question scores for that group. See /1/protocol/index - GET for the group's question_count.

ASSESSMENT_MILESTONE_<GROUP>_GAPS

milestone_gaps, score_gaps
  • "Milestone <milestone list>" (e.g. "Milestone 3, 5")
  • "<No Gaps>"
Identifies the questions in the group that have not reached full criteria (< 1.0) but whose successors (question_num+1) have.

ASSESSMENT_MILESTONE_<GROUP>_HIGHEST

milestone_highest1_point_score
0..question_countThe last MILESTONE (question_num) that scored 1. See /1/protocol/index - GET for the group's question_count.

ASSESSMENT_MILESTONE_<GROUP>_ATLEASTONE

milestone_has_at_least_one
0 (false), 1 (true)If any of the questions scored 1

ASSESSMENT_MILESTONE_<GROUP>_LEVEL

milestone_level_with_first_gap
1, 2, 3Using the same gap determination as 'score_gaps', determines the level in the group that has the 1st gap. See /1/protocol/index - GET for the group's level definitions.

ASSESSMENT_MILESTONE_<GROUP>_KNOWNS_<QUESTION_NUM>

milestone_knowns
  • "cup, bottle"
  • "No items listed for this milestone."
A list of acquired knowns for the question. ** This is not fully implemented functionality at this time. Reserved for future use. These sections have conditionals that evaluate to false, so these variables should never need to be resolved.**

ASSESSMENT_BARRIERS_SCORE_<QUESTION_NUM>

bind_barrier_variable,
barrier_score
0..4The score for the barrier question. See /1/protocol/index - GET for the group's question_count.

ASSESSMENT_BARRIERS_NUMBER_ELEVATED

bind_barrier_variable
0..question_countThe number of barrier question responses that had a value >= 2

ASSESSMENT_BARRIERS_COUNT_OVER_ZERO

bind_barrier_variable
0..question_countThe number of barrier question responses that had a value > 0

ASSESSMENT_BARRIERS_OVERALLSCORE

bind_barrier_variable
0..96The sum of all barrier question responses

STUDENT_FULL_NAME

bind_other_variable The student's full name

STUDENT_FIRST_NAME

bind_other_variable The student's first name

STUDENT_ASSESSOR

bind_other_variable The person conducting the assessment

STUDENT_ASSESSMENT_DATES

bind_other_variable"2014-12-12, 2014-9-12, ..."The dates that assessments were conducted