Difference between revisions of "Family Management"

From California PowerSchool User Group
Jump to: navigation, search
(Family Representative)
(Family Representative)
Line 202: Line 202:
 
<NoHeaderRow></NoHeaderRow>
 
<NoHeaderRow></NoHeaderRow>
 
</pre>
 
</pre>
|
+
|-
 
Finding all students in families whose family_rep does not match the "Youngest in Family" rule. Useful for selecting these students and clearing their family_rep value. Then use the report below to set the correct representative.
 
Finding all students in families whose family_rep does not match the "Youngest in Family" rule. Useful for selecting these students and clearing their family_rep value. Then use the report below to set the correct representative.
 
|
 
|

Revision as of 15:13, 22 March 2018

Family Management as practiced by Valley Christian Schools. This does not pretend to be a prescription for "HOW IT SHOULD BE DONE", but rather simply shares how one school does it's best to manage families.

Introduction

Identifying related students and the ability to share data among those students is the goal of family management, which allows schools to enter student data once and share data among family members.

Learn more about Family Management Setup in PowerSchool by searching for "Family" in the Help area.

Once identified, shared data can be copied without additional data entry. Additionally, edited data can be dynamically updated for all students with the predetermined family relationship.

The Family Management function enables the district to:

  • Control which student fields are copied from one student to another.
  • Limit the scope of student records visible to a school administrator.
  • Limit the scope of family associations to only those student records within the same school.

At Valley Christian we work to manage families by:

  • Allowing district-wide scope for family associations.
  • Adding all our custom guardian fields to the list of family management fields.
  • Continue using the Family_Ident field still in the database but not used by the application.
  • Diligently marking the youngest student as the "Family Representative".
  • Annual review of family relationships when the family directory is published.
  • Use of sqlReports to identify problem areas in family setup.
  • Training and reviewing with secretaries how to link families on registration and how to update siblings when demographic changes are made.

Family_Ident field

The Family_Ident field exists as a legacy field in the database that is no longer used by the application. We've added it back to the "Modify Info" screen. It is key to our family management that every student from the same family shares the same family_ident value.

The following page fragment will add the family_ident field to the "Modify Info" screen along with a link to assign the next available Family ID when needed.

The file needs to be placed in admin/students

File (download and unzip) Code

modifydata.familyid.content.footer.txt

<!-- create a hidden table with added rows, use jQuery to move the inserted rows to target table -->
<table id="familyidhiddentable" style="display: none;">
<tr id="familyidrow">
    <td class="bold">Family ID</td>
    <td><input type="text" id="familyidfield" name="[Students]Family_Ident" value="">
    <a href="javascript:void(0)" id="usenextfamilyid"><strong>Copy next available Family ID: <span id="nextfamilyidval">~[tlist_sql;select max(family_ident)+1 from students]~(maxFamilyID;t)[/tlist_sql]</span></strong>
    </td>
</tr>
</table>
<script>
$j(function() {
    /* place the family id row at the beginning of the table */
    $j("table:first").prepend($j("#familyidrow"));

    /* remove the hidden table */
    $j("#familyidhiddentable").remove();

    /* Function to add click listener to copy the next available ID */
    $j("#usenextfamilyid").click(function() {
        if($j("#familyidfield").val() == "") {
            $j("#familyidfield").val( $j("#nextfamilyidval").html() );
        }
    });

});
</script>
Family ID Screenshot

Validation

The family_ident field is a text field in the database. For the fragment to work, you need to make sure only integer values are stored. If you already have content in family_ident, review the contents and make corrections as needed. A useful search followed by a quick export can help: /family_ident#

To ensure the family_ident field remains integer values, we added a text mask:

  • District - Data Validation Configuration - Text Mask Administration
    • Name: Numeric 5 digits
    • Validation Feedback Hint: Must be a 5-digit numerical value.
    • Format/Value: #####
  • District - Data Validation Configuration - Data Validation Rule Status
    • Find the "STUDENTS FAMILY_IDENT" entry
    • Assign the "Numeric 5 digit" mask

Family Representative

Our practice is to mark the "youngest in the family not in Preschool" as the "Family Rep" on the "Modify Info" screen. If their only student is in Preschool, then they are the family rep.

To search for all unique families in the district, one can then type the following search from district office: family_rep#

To maintain the accuracy of the family_rep setting, we rely on some sqlReports:

Finding all students in families whose family_rep does not match the "Youngest in Family" rule. Useful for selecting these students and clearing their family_rep value. Then use the report below to set the correct representative.
Description Code to copy/paste into sqlReports import box

Finding families and students with no Family ID or where they have more or less than one Family Representative

<ReportName>Family Id and Rep Audit v2</ReportName>
<ReportTitle>Family ID and Rep Audit v2</ReportTitle>
<AfterTitle></AfterTitle>
<ReportGroup>Family</ReportGroup>
<ReportDescription><textarea name="PF-RptDescr-00601219166">Reports issues with Family IDs and family rep. Identifies families or students where:
- The family has more or less than one family representative
- The family_ident field is blank</textarea></ReportDescription>
<SQLQuery><textarea name="UF-00600519166">SELECT 
s.dcid,
s.lastfirst,
s.grade_level as grade_level,
s.family_ident as family_ident,
sc.family_rep as family_rep

FROM
students s
LEFT OUTER JOIN studentcorefields sc ON s.dcid = sc.studentsdcid
INNER JOIN
(SELECT
s.family_ident as family_id

FROM
students s
LEFT OUTER JOIN studentcorefields sc ON s.dcid = sc.studentsdcid

WHERE s.enroll_status IN (0~[if#prereg.%param1%=Yes],-1[/if#prereg])

GROUP BY s.family_ident

HAVING sum(nvl(sc.family_rep,0)) != 1) f

ON s.family_ident = f.family_id

UNION ALL

SELECT 
s.DCID,
s.lastfirst,
s.grade_level as grade_level,
s.family_ident as family_ident,
sc.family_rep as family_rep

FROM
students s
LEFT OUTER JOIN studentcorefields sc ON s.dcid = sc.studentsdcid

WHERE
s.enroll_status IN (0~[if#prereg.%param1%=Yes],-1[/if#prereg]) AND
s.family_ident IS NULL

ORDER BY
family_ident, grade_level</textarea></SQLQuery>
<ReportHeader><th class="DCID">DCID</th><th>Student</th><th>Grade</th><th>Family Ident</th><th>Family Rep</th></ReportHeader>
<CreateStudentSelection>0</CreateStudentSelection>
<StudentSelectionQuery></StudentSelectionQuery>
<CreateStudentSelectionB>1</CreateStudentSelectionB>
<IncludeRowNumber>0</IncludeRowNumber>
<OpeninNewWindow>0</OpeninNewWindow>
<HideCopyButton></HideCopyButton>
<HideCSVButton></HideCSVButton>
<HideTabButton></HideTabButton>
<HidePDFButton></HidePDFButton>
<ShowSearchBox></ShowSearchBox>
<ShowResultsInfo></ShowResultsInfo>
<ParameterName1>Include pre-registered students?</ParameterName1>
<ParameterVal1>No</ParameterVal1>
<ParameterCal1></ParameterCal1>
<ParameterOpt1>yesorno</ParameterOpt1>
<ParameterName2></ParameterName2>
<ParameterVal2></ParameterVal2>
<ParameterCal2></ParameterCal2>
<ParameterOpt2></ParameterOpt2>
<ParameterName3></ParameterName3>
<ParameterVal3></ParameterVal3>
<ParameterCal3></ParameterCal3>
<ParameterOpt3></ParameterOpt3>
<ParameterName4></ParameterName4>
<ParameterVal4></ParameterVal4>
<ParameterCal4></ParameterCal4>
<ParameterOpt4></ParameterOpt4>
<ParameterName5></ParameterName5>
<ParameterVal5></ParameterVal5>
<ParameterCal5></ParameterCal5>
<ParameterOpt5></ParameterOpt5>
<PdfOrientation></PdfOrientation>
<NoCSVQuotes></NoCSVQuotes>
<NoRowSel></NoRowSel>
<ShowSHC></ShowSHC>
<UseColRe></UseColRe>
<UseFixHdr></UseFixHdr>
<HidePrint></HidePrint>
<ReportNotes></ReportNotes>
<UseColFilt></UseColFilt>
<UseRowGroups></UseRowGroups>
<UseRowGroupsOptions></UseRowGroupsOptions>
<DisplayRowGroupsCol></DisplayRowGroupsCol>
<UseRowGroupsCounts></UseRowGroupsCounts>
<sqlChartsReport></sqlChartsReport>
<InitialsqlChart></InitialsqlChart>
<InitialChartName></InitialChartName>
<RowGroupsDesc></RowGroupsDesc>
<sqlExportsReport></sqlExportsReport>
<FLSMapField></FLSMapField>
<ExcFrmList></ExcFrmList>
<ExecGrp></ExecGrp>
<ValueLi3>0</ValueLi3>
<NoHeaderRow></NoHeaderRow>
<ReportName>Family Rep Youngest Errors</ReportName>
<ReportTitle>Family Rep Youngest Errors</ReportTitle>
<AfterTitle></AfterTitle>
<ReportGroup>Family</ReportGroup>
<ReportDescription><textarea name="PF-RptDescr-00601219167">(PSUG Version) Finds families where the family rep does not match the rule of &quot;Youngest in Family&quot;. After reviewing, the best way to correct is to clear the Family_Rep flag for this report's current selection. Then run the &quot;Family Rep Youngest Select&quot; report to efficiently select the correct family_rep students.</textarea></ReportDescription>
<SQLQuery><textarea name="UF-00600519167">SELECT
s.DCID,
s.lastfirst,
s.grade_level as grade_level,
s.family_ident as family_ident,
sc.family_rep as family_rep

FROM
students s
LEFT OUTER JOIN studentcorefields sc ON s.dcid = sc.studentsdcid
INNER JOIN

(SELECT
s.family_ident as family_id

FROM students s LEFT JOIN studentcorefields sc ON s.dcid = sc.studentsdcid

WHERE s.id IN

  ( SELECT min(id) keep (dense_rank first order by grade_level)
    FROM students
    WHERE enroll_status=0
    GROUP BY family_ident
  ) AND
  nvl(sc.family_rep,0) != 1) fr
  
ON s.family_ident = fr.family_id
  
ORDER BY s.family_ident, s.grade_level</textarea></SQLQuery>
<ReportHeader><th class="DCID">DCID</th><th>Student</th><th>Grade</th><th>FamilyID</th><th>FamilyRep</th></ReportHeader>
<CreateStudentSelection>0</CreateStudentSelection>
<StudentSelectionQuery></StudentSelectionQuery>
<CreateStudentSelectionB>1</CreateStudentSelectionB>
<IncludeRowNumber>1</IncludeRowNumber>
<OpeninNewWindow>0</OpeninNewWindow>
<HideCopyButton></HideCopyButton>
<HideCSVButton></HideCSVButton>
<HideTabButton></HideTabButton>
<HidePDFButton></HidePDFButton>
<ShowSearchBox></ShowSearchBox>
<ShowResultsInfo></ShowResultsInfo>
<ParameterName1></ParameterName1>
<ParameterVal1></ParameterVal1>
<ParameterCal1></ParameterCal1>
<ParameterOpt1></ParameterOpt1>
<ParameterName2></ParameterName2>
<ParameterVal2></ParameterVal2>
<ParameterCal2></ParameterCal2>
<ParameterOpt2></ParameterOpt2>
<ParameterName3></ParameterName3>
<ParameterVal3></ParameterVal3>
<ParameterCal3></ParameterCal3>
<ParameterOpt3></ParameterOpt3>
<ParameterName4></ParameterName4>
<ParameterVal4></ParameterVal4>
<ParameterCal4></ParameterCal4>
<ParameterOpt4></ParameterOpt4>
<ParameterName5></ParameterName5>
<ParameterVal5></ParameterVal5>
<ParameterCal5></ParameterCal5>
<ParameterOpt5></ParameterOpt5>
<PdfOrientation></PdfOrientation>
<NoCSVQuotes></NoCSVQuotes>
<NoRowSel></NoRowSel>
<ShowSHC></ShowSHC>
<UseColRe></UseColRe>
<UseFixHdr></UseFixHdr>
<HidePrint></HidePrint>
<ReportNotes></ReportNotes>
<UseColFilt></UseColFilt>
<UseRowGroups></UseRowGroups>
<UseRowGroupsOptions></UseRowGroupsOptions>
<DisplayRowGroupsCol></DisplayRowGroupsCol>
<UseRowGroupsCounts></UseRowGroupsCounts>
<sqlChartsReport></sqlChartsReport>
<InitialsqlChart></InitialsqlChart>
<InitialChartName></InitialChartName>
<RowGroupsDesc></RowGroupsDesc>
<sqlExportsReport></sqlExportsReport>
<FLSMapField></FLSMapField>
<ExcFrmList></ExcFrmList>
<ExecGrp></ExecGrp>
<ValueLi3>0</ValueLi3>
<NoHeaderRow></NoHeaderRow>